【问题标题】:How to get element content using only XPath and C# .NET如何仅使用 XPath 和 C# .NET 获取元素内容
【发布时间】:2013-04-15 09:59:07
【问题描述】:

我找到了很多关于如何使用简单的 XPath 表达式和 C# 获取节点内容的文章,例如:

XPath:

/bookstore/author/first-name

C#:

string xpathExpression = "/bookstore/author/first-name";

nodes = navigator.Select(xpathExpression);

我想知道如何获取一个元素内的内容,而同一个元素又在另一个元素内,又一个又一个。
看看下面的代码:

<Cell>          
    <CellContent>
        <Para>                               
            <ParaLine>                      
                <String>ABCabcABC abcABC abc ABCABCABC.</string> 
            </ParaLine>                      
        </Para>     
    </CellContent>
</Cell>

我只想从String元素中提取内容ABCabcABC abcABC abc ABCABCABC.

你知道如何使用XPath表达式.Net C#解决问题吗?

【问题讨论】:

    标签: c# .net xml xpath


    【解决方案1】:

    googling c# .net xpath 几秒钟后,您会找到this article,它提供了您可以轻松修改以使用XPathDocumentXPathNavigatorXPathNavigator::SelectSingleNode() 的示例:

    XPathNavigator nav;
    XPathDocument docNav;
    string xPath;
    
    docNav = new XPathDocument("c:\\books.xml");
    nav = docNav.CreateNavigator();
    xPath = "/Cell/CellContent/Para/ParaLine/String/text()";
    
    string value = nav.SelectSingleNode(xPath).Value
    

    我建议更多阅读 xPath syntax。更多。

    【讨论】:

    • 我不得不处理 XPathNavigator、XPathDocument...。问题是该文件看起来不像一个简单的 xml。我的意思是 abababababababa。一个元素包含另一个元素,此处为:>>。如此简单的 XPath 语法不起作用“/Cell/CellContent/Para/ParaLine/String/text()”;。我询问其他解决方案,然后是简单的 xpath 表达式。
    • @mazury 不是有效的 XML,您不能使用 xPath
    【解决方案2】:
    navigator.SelectSingleNode("/Cell/CellContent/Para/ParaLine/String/text()").Value
    

    【讨论】:

      【解决方案3】:

      您也可以使用 Linq to XML 来获取指定元素的值

      var list = XDocument.Parse("xml string").Descendants("ParaLine")
                       .Select(x => x.Element("string").Value).ToList();
      

      从上面的查询中,您将获得 ParaLine 标记内的所有字符串元素的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-13
        • 1970-01-01
        • 2015-11-06
        • 2013-01-15
        • 2020-07-20
        • 1970-01-01
        • 1970-01-01
        • 2012-12-01
        相关资源
        最近更新 更多