【问题标题】:How to read specific XML values?如何读取特定的 XML 值?
【发布时间】:2016-06-23 19:21:48
【问题描述】:

这是给定的 XML:

<NewDataSet>
  <Table>
    <ProductCode>0120314</ProductCode>
    <SpecificationItemName>USB</SpecificationItemName>
    <SpecificationItemValues>&lt;Values xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;&lt;Value&gt;USB 2.0&lt;/Value&gt;&lt;/Values&gt;</SpecificationItemValues>
  </Table>
  <Table>
    <ProductCode>0987046</ProductCode>
    <SpecificationItemName>Other</SpecificationItemName>
    <SpecificationItemValues>&lt;Values xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;&lt;Value&gt;1 x PCIe 2.0 x16&lt;/Value&gt;&lt;Value&gt;2 x PCIe 2.0 x1&lt;/Value&gt;&lt;/Values&gt;</SpecificationItemValues>
  </Table>
</NewDataSet>

这是我读取 ProductCode、SpectificationItemName 和 SpecificationItemValues 的完整值的解决方案。 你能帮我按值(一个一个,如果不止一个)阅读 SpecificationItemValues 吗?谢谢。

这是我的代码:

foreach (XmlNode nodeSpecification in xmlDokument.SelectSingleNode("//NewDataSet"))
{
    if (nodeSpecification.Name == "Table")
    {
        foreach (XmlNode nodeElements in nodeSpecification)
        {
            if (nodeElements.Name == "ProductCode")
            {
                MessageBox.Show(nodeElements.InnerText);
            }
            if (nodeElements.Name == "SpecificationItemName")
            {
                MessageBox.Show(nodeElements.InnerText);
            }
            if (nodeElements.Name == "SpecificationItemValues")
            {
                MessageBox.Show(nodeElements.InnerText);                          
            }
        } //you were missing a closing } by the way
    }
}

【问题讨论】:

  • 您必须对“SpecificationItemValues”的内部文本值进行 Xml 解码,并使用 xml 文档的其他实例解析它们。这个答案应该给你一个想法stackoverflow.com/questions/6757019/…

标签: c# xml


【解决方案1】:

谢谢@Sam.C 和@Amir Sasson。在您的帮助下找到完整的解决方案。

if (cvorElementi.Name == "SpecificationItemValues")
{
var xmlValues = System.Net.WebUtility.HtmlDecode(cvorElementi.InnerText);
    XmlDocument valuesDoc = new XmlDocument();
    valuesDoc.LoadXml(xmlValues);

    foreach (XmlNode valuesNode in valuesDoc.SelectSingleNode("//Values"))
    {
        if (valuesNode.Name=="Value")
            {
             MessageBox.Show(valuesNode.InnerText);
            }
    }
}                               

【讨论】:

  • Marco,您可以将我们的答案标记为有用,以便其他人受益。
  • @AmirSasson 我真的很想尝试几次,但由于我是 Stackoverflow 的新手,所以不要让我 :-( 抱歉!15 声望之类的...
【解决方案2】:

像这样:
在 SpecificationItemValues 节点上:

var xmlValues = System.Web.HttpUtility.HtmlDecode(nodeElements.InnerText);
//you might want to use System.Net.WebUtility.HtmlDecode instead to avoid System.Web
XmlDocument valuesDoc = new XmlDocument();
valuesDoc .LoadXml(xmlValues );
var vals = valuesDoc.SelectNodes("//Value");
//Here You Can iterate on vals

【讨论】:

    猜你喜欢
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多