Comments (6)
It is possible to set a value-less attribute, however it is a bit awkward and unintuitive as HtmlAgilityPack is not providing a simple convenient API for that.
Basically, currently you gotta do something like this:
static HtmlAttribute SetNoValueAttribute(HtmlNode element, string attributeName)
{
var attr = element.Attributes[attributeName]
?? element.Attributes.Append(attributeName);
attr.Value = null;
attr.QuoteType = AttributeValueQuote.WithoutValue;
return attr;
}
SetNoValueAttribute(iframeNode, "allowfullscreen");
from html-agility-pack.
It is possible to set a value-less attribute, however it is a bit awkward and unintuitive as HtmlAgilityPack is not providing a simple convenient API for that.
Thanks for your response and code example.
@JonathanMagnan Even if it is possible to create such value-less attributes, can we discuss about my suggestion to allow attributes to have a boolean value?
from html-agility-pack.
Hello @jekru ,
What exactly are you expecting from your proposed method Attributes.Add(string name, bool value)
to do?
<div checked></div>
<div checked="true"></div>
<div checked="false"></div>
One solution, meanwhile, is surely creating an extension method on your side using @elgonzo .
From what I understand, you would like it to do this answer <div checked></div>
but having a method with a bool parameter that do nothing will add more confusion than anything else as someone not knowing this issue would expect that it will generate the solution 2 or 3 depending of the value.
Best Regards,
Jon
from html-agility-pack.
I would expect that Attributes.Add(string, name, bool value)
respectively SetAttributeValue(string name, bool value)
would result in <div checked></div>
(when using "checked"
as name and true
as value). But you are right, this could let to confusion because someone could interpret a boolean value to result in <div checked="true"><div>
.
The only problem I see is that there is no way to identify value-less attributes. Here is an example where I would expect null
as Value
and AttributeValueQuote.WithoutValue
as QuoteType
:
using System;
using System.Linq;
using HtmlAgilityPack;
public class Program
{
public static void Main()
{
var input = HtmlNode.CreateNode("<input checked></input>");
var checkedAttribute = input.Attributes.First();
// Result is: Value: '' (empty string)
Console.WriteLine($"Value: '{checkedAttribute.Value}'");
// Result is: QuoteType: DoubleQuote
Console.WriteLine($"QuoteType: {checkedAttribute.QuoteType}");
}
}
from html-agility-pack.
Hello @jekru ,
Something for sure is that by default, we prefer to keep the current empty with the double quote behavior for backward compatibility. Browsers have different behavior on value-less attributes (firefox in developer mode will do the "empty string" like us while Chrome will keep it without value). Which browser is right? I'm not sure of the answer but keeping being backward compatible in this case is probably the best.
from html-agility-pack.
You made a good point with backward compatibility and I also was not aware that the behavior differs from browser to browser. What about creating a function IsBooleanAttribute()
or IsValueLessBooleanAttribute()
that only returns true
if the attribute is a standard html attribute and defined as boolean attribute f.e. "checked"
or it is a non standard html atttribute and is without a value (also not an empty string)?
from html-agility-pack.
Related Issues (20)
- Inconsistent comment rendering HOT 6
- update System.Net.Http to 4.3.4 HOT 2
- The html rendering result is different from the html output result HOT 5
- The html rendering result is different from the html output result when tbody is added inside unclosed th HOT 3
- After applying HAP1.11.57, InnerText cannot be obtained correctly. HOT 11
- (2) The html rendering result is different from the html output result HOT 4
- Can't find a node with a long id HOT 1
- it happened again after a Rolled back to version HtmlAgilityPack 1.11.50, then again to HtmlAgilityPack 1.11.57 and it worked. HOT 2
- Can't find a node used HtmlAgilityPack 1.11.57 HOT 2
- How to make the DocumentNode.SelectNodes(XPath) for both text and img content together in the correct sequence? HOT 3
- ??? HOT 2
- Double <p> <p> open tags leave one <p> open even with option setted HOT 6
- The html rendering result is different from the html output result when we have two unclosed tbody tags HOT 2
- When we have a closing tag before the current open tag is closed we have different results between HAP and Chrome rendering
- The formatting is a bit interesting HOT 1
- Set PackageLicenseExpression on nuget HOT 5
- page source code HOT 19
- [HtmlAgilityPack version 1.11.60] request: add HtmlWeb Load() exception HOT 5
- bug: SelectSingleNode not returning anything HOT 7
- Modify a `#text` node name causes a `StackOverflowException` HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from html-agility-pack.