Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查XML属性是否包含字符串?_C#_Xml_Linq - Fatal编程技术网

C# 如何检查XML属性是否包含字符串?

C# 如何检查XML属性是否包含字符串?,c#,xml,linq,C#,Xml,Linq,以下是XML(我以XML格式保存了一个html页面,以便对其进行一般性解析: <td width="76" class="DataB">2.276</td> <td width="76" class="DataB">2.289</td> <td width="76" class="DataB">2.091</td> <td width="76" class="DataB">1.952</td> <

以下是XML(我以XML格式保存了一个html页面,以便对其进行一般性解析:

<td width="76" class="DataB">2.276</td>
<td width="76" class="DataB">2.289</td>
<td width="76" class="DataB">2.091</td>
<td width="76" class="DataB">1.952</td>
<td width="76" class="DataB">1.936</td>
<td width="76" class="Current2">1.899</td>
这将返回对象不存在的
错误:

((string) element.Attribute("class"))

如何检查属性是否包含某些内容?

您使用的XML输入可能有问题-在LINQPad中尝试以下代码对我很有用:

XDocument xml = XDocument.Parse(@"<tr><td width=""76"" class=""DataB"">2.276</td>
<td width=""76"" class=""DataB"">2.289</td>
<td width=""76"" class=""DataB"">2.091</td>
<td width=""76"" class=""DataB"">1.952</td>
<td width=""76"" class=""DataB"">1.936</td>
<td width=""76"" class=""Current2"">1.899</td></tr>");

var xElements = xml.Descendants("td").Where(element => ((string) element.Attribute("class")).Contains("Current"));

xElements.Dump();
xdocumentxml=XDocument.Parse(@“2.276
2.289
2.091
1.952
1.936
1.899");
var-xElements=xml.substands(“td”)。其中(element=>((string)element.Attribute(“class”)。包含(“Current”);
xElements.Dump();

您确定您的XML是有效的吗?

您使用的XML输入可能有问题-在LINQPad中尝试此代码对我很有用:

XDocument xml = XDocument.Parse(@"<tr><td width=""76"" class=""DataB"">2.276</td>
<td width=""76"" class=""DataB"">2.289</td>
<td width=""76"" class=""DataB"">2.091</td>
<td width=""76"" class=""DataB"">1.952</td>
<td width=""76"" class=""DataB"">1.936</td>
<td width=""76"" class=""Current2"">1.899</td></tr>");

var xElements = xml.Descendants("td").Where(element => ((string) element.Attribute("class")).Contains("Current"));

xElements.Dump();
xdocumentxml=XDocument.Parse(@“2.276
2.289
2.091
1.952
1.936
1.899");
var-xElements=xml.substands(“td”)。其中(element=>((string)element.Attribute(“class”)。包含(“Current”);
xElements.Dump();

你确定你的XML是有效的吗?

如果你问我,作为xpath查询编写会更容易。这样你就不必处理元素不包含类属性的情况和其他类似情况

var query = xml.XPathSelectElements("//td[contains(@class,'Current')]");
否则,您必须在尝试读取属性之前检查属性是否存在

// query syntax makes this a little nicer
var query =
    from td in xml.Descendants("td")
    let classStr = (string)td.Attribute("class")
    where classStr != null && classStr.Contains("Current")
    select td;
// or alternatively, provide a default value
var query =
    from td in xml.Descendants("td")
    where ((string)td.Attribute("class") ?? "").Contains("Current")
    select td;

如果你问我,写xpath查询会更容易,这样你就不必处理元素不包含类属性的情况和其他类似情况

var query = xml.XPathSelectElements("//td[contains(@class,'Current')]");
否则,您必须在尝试读取属性之前检查属性是否存在

// query syntax makes this a little nicer
var query =
    from td in xml.Descendants("td")
    let classStr = (string)td.Attribute("class")
    where classStr != null && classStr.Contains("Current")
    select td;
// or alternatively, provide a default value
var query =
    from td in xml.Descendants("td")
    where ((string)td.Attribute("class") ?? "").Contains("Current")
    select td;

你确定XML没有声明默认名称空间吗?你应该看一下。这是解析Html内容的好库(它避免了转换并确保了良好的Xhtml格式)@SteveB实际上这就是数据的来源。我创建了一个屏幕抓取服务,它抓取一个页面,然后将其转换为XDocument。你确定XML没有声明默认名称空间吗?你应该看一下。这是解析Html内容的好库(它避免了转换并确保了良好的Xhtml格式)@SteveB事实上,这就是数据的来源。我创建了一个屏幕抓取服务,可以抓取一个页面,然后将其转换为XDocument。如果我说(string)element.Attribute(“class”)=“Current”它工作得很好。你可以发布更多的XML以及你实际执行查询的位置吗?这两个东西都被发布了。你看到的XML是相关数据,而我尝试进行的查询是代码中的一个。我不确定我还能发布什么?XML不完整。你不能按原样加载到XDocument中,它没有pro每个根节点。查询是编写的,但没有在提供的代码中执行(例如LINQPad中的xElements.Dump()或对xElement集合进行迭代)明白了吗?我实际上只是从列表中获取值,并将数据添加到数据库中,所以这部分可能没有帮助。但是如果我说(字符串)的话,只需要一秒钟的时间元素属性(“类”)=“当前”它工作得很好。你可以发布更多的XML以及你实际执行查询的位置吗?这两个东西都被发布了。你看到的XML是相关数据,而我尝试进行的查询是代码中的一个。我不确定我还能发布什么?XML不完整。你不能按原样加载到XDocument中,它没有pro每个根节点。查询是编写的,但没有在提供的代码中执行(例如LINQPad中的xElements.Dump()或对xElement集合进行迭代)明白了吗?我实际上只是从列表中获取值并将数据添加到数据库中,所以这部分可能没有帮助。但数据只需要一秒钟