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「it's」行に等しいinnerTextを持つ有効なオブジェクトを返しましたが、属性にアクセスする方法がわかりません(さまざまな方法を試しましたが、すべて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スペースと単純なスペースで'='十分かもしれません。

フォーマットが比較的固定されている場合、または何かを置き換える必要がある場合 - string.Replace(またはRegEx.Replace) が機能する可能性があります。

  instruction.Value = instruction.Value.Replace("lang=\"ae\"", "lang=\"XX\"");
于 2015-11-04T07:33:37.173 に答える