从处理指令行读取 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\"");
我在 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\"");