在XPath中获取特殊属性的问题

时间:2017-05-24 10:11:33

标签: c# xml linq xpath

我试图从xml:lang更改<section>属性值,但它会给我一个错误,可能是因为&#34;:&#34;

我还尝试过检查文本,但也出错了:

Debug.WriteLine(xml.SelectSingleNode("/section/@xml:lang").InnerText)

我也尝试过Linq,但这也是一个错误...

如果可以提供帮助,这是我的XML文件的开头:

<?xml version="1.0" encoding="UTF-8"?>

<section xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:ns5="http://www.w3.org/2000/svg" xmlns:ns4="http://www.w3.org/1998/Math/MathML" xmlns:ns3="http://www.w3.org/1999/xhtml" xmlns:date="http://exslt.org/dates-and-times" xmlns:d="http://docbook.org/ns/docbook" audience="notxml" xml:id="EBLTE00BLT501" remap="EBLTE00BLT501-Tuyaux_BLUTOP_dn75-160" version="5.0" xml:lang="fr" role="fiche">

  <title>Tubo BLUTOP BioZinalium (fabrico para expedição em contentor)</title>

    [...]

谢谢你们

1 个答案:

答案 0 :(得分:1)

您必须指定命名空间:

var manager = new XmlNamespaceManager(xml.NameTable);
manager.AddNamespace("ns", "http://docbook.org/ns/docbook");

var lang = xml.SelectSingleNode("/ns:section/@xml:lang", manager);
lang.InnerText = "en";

您也可以更简单地获得它:

var lang = xml.DocumentElement.Attributes["xml:lang"];
lang.InnerText = "en";