XPath用于获取具有特定id值的元素的字符串

saz*_*azr 10 c# xml xpath

我正在尝试创建一个XPath查询/字符串,用于从XML文档中获取特定元素.我试图抓住id = 38的元素,但我的代码总是因某种原因没有返回任何内容.

如果你查看我的代码和我的XML文件的组织,你能告诉我什么XPath我需要抓取id = 38的元素?

我的代码是:

XmlDocument xdoc = new XmlDocument();
xdoc.Load(getProductURL());
XmlNode node = xdoc.DocumentElement.SelectSingleNode("id('38')");

// node always is null for some reason?
Run Code Online (Sandbox Code Playgroud)

组织xml的方式如下:

<courseg>
    <group isempty="False" isbranch="true" id="1" name="abc">
        <group isempty="False" isbranch="true" id="38" name="def"></group>
    </group>
</courseg>
Run Code Online (Sandbox Code Playgroud)

Pet*_*nov 19

你需要的XPath是

//*[@id='38']
Run Code Online (Sandbox Code Playgroud)

以下是XDocument的示例:

        XDocument xdoc = XDocument.Parse(@"
<courseg>
    <group isempty=""False"" isbranch=""true"" id=""1"" name=""abc"">
        <group isempty=""False"" isbranch=""true"" id=""38"" name=""def""></group>
    </group>
</courseg>");
        XElement node = xdoc.Root.XPathSelectElement("//*[@id='38']");
        Console.WriteLine(node);
Run Code Online (Sandbox Code Playgroud)


Mic*_*Kay 5

函数id('P38')将选择ID值为P38的元素.但这并不仅仅意味着"名为'id'的属性".它表示在DTD或模式中声明的属性类型为ID.您没有显示DTD或架构,我怀疑您没有.如果你这样做,并且如果它将id属性声明为类型ID,那么你的文档将是无效的,因为ID值不能是全数字的(因为传统的SGML原因,它必须采用名称的形式).

实际上,除非您有严格的性能要求,否则最好避免使用id()函数.它太脆弱了 - 它仅在您根据模式或DTD验证源文档时才有效.在XSLT中,使用key()代替.或者,许多处理器现在将属性名称xml:id识别为"自我声明"ID值,而不引用架构或DTD:如果您的处理器支持它,请使用它.