从处理指令行读取 XML 属性

Reading XML attribute from a processing instruction line

我在 XML 文档中有以下行

<?ish ishref="GUID-XXXXXXXXXXXXXXXXXXXX" version="1" lang="ae" srclng="en"?>

并想读取(和修改)lang 属性。我尝试了以下方法:

newXMLDoc.Load(XMLfile);
instruction = newXMLDoc.SelectSingleNode("/processing-instruction('ish')")
         as XmlProcessingInstruction;

instruction return 编辑了一个 innerText 等于 "it's" 行的有效对象,但我不知道如何访问属性(尝试了各种方法,但所有 return空)

如何访问 instruction 的属性(或者是否有其他更好的访问方式)?

我尝试过像“/ish@lang”和 instruction.Attributes 这样的 XPath,但那些只是 return NULL。

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

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 值的严格程度。如果您知道值没有 space,则 space 上的简单 String.Split'=' 上的简单 String.Split 可能就足够了,否则一些更复杂的方法,也许 RegEx 需要被写入。

如果格式相对固定或者您只需要替换一些东西 - string.Replace(或 RegEx.Replace)可以工作:

  instruction.Value = instruction.Value.Replace("lang=\"ae\"", "lang=\"XX\"");