1

我在 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”这样的XPath,instruction.Attributes但那些只是返回NULL。

我更喜欢非 LINQ 解决方案,我使用的是 .NET 4.5

4

1 回答 1

2

处理指令只包含文本——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\"");
于 2015-11-04T07:33:37.173 回答