我在XML文档中有以下行
<?ish ishref="GUID-XXXXXXXXXXXXXXXXXXXX" version="1" lang="ae" srclng="en"?>
并希望阅读(并修改)lang属性。我尝试过以下方法:
newXMLDoc.Load(XMLfile);
instruction = newXMLDoc.SelectSingleNode("/processing-instruction('ish')")
as XmlProcessingInstruction;
instruction
返回一个有效的对象,其innerText等于“it's”行,但我不知道如何访问属性(尝试了各种方法,但都返回null)
如何访问instruction
的属性(或者是否有更好的访问方式)?
我尝试过类似“/ ish @ lang”和instruction.Attributes
的XPath,但那些只返回NULL。
我更喜欢非LINQ解决方案,我使用的是.NET 4.5
答案 0 :(得分:2)
Processing instruction只包含文本 - XML规范不对内容施加任何限制,也不对它们赋予任何结构。因此,要获取内部文本,只需使用Value
属性:
var newXMLDoc = new XmlDocument();
newXMLDoc.LoadXml("<?ish t='v' u='v'?><R></R>");
var instruction = newXMLDoc.SelectSingleNode("/processing-instruction('ish')")
as XmlProcessingInstruction;
Console.WriteLine(instruction.Value); // t='v' u='v'
解析结果值取决于PI的严格值。如果你知道价值观没有空格,那么空间和String.Split
上的简单'='
就足够了,否则一些更复杂的方法,可能需要写入RegEx。
如果格式相对固定或者您只需要替换某些内容 - string.Replace
(或RegEx.Replace
)可以有效:
instruction.Value = instruction.Value.Replace("lang=\"ae\"", "lang=\"XX\"");