繁体   English   中英

从处理指令行读取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返回的innerText等于“ it's”行的有效对象,但我不知道如何访问属性(尝试了多种方法,但都返回null)

如何访问instruction的属性(或者还有另一种方法可以更好地进行访问)?

我已经尝试过像“ / ish @ lang”和instruction.Attributes这样的XPath,但是它们只是返回NULL。

我希望使用非LINQ解决方案,我使用的是.NET 4.5

处理指令仅包含文本-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。

如果format是相对固定的,或者您只需要替换某些内容,则string.Replace (或RegEx.Replace )可以工作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM