2016-07-12 15 views
0

XdmNodeからソース文書の行番号と列を取得する必要があります。私は私がこれを行うことができます知っている:XdmNode行番号と列

XmlNode n = (XmlNode)((VirtualNode)node.Unwrap()).getUnderlyingXmlNode(); 
IXmlInfo xInfo = (IXmlInfo)n; 
int line = xInfo.LineNumber; 
int col = xInfo.LinePosition; 

しかしnode.Unwrap()は、タイプnet.sf.saxon.tree.tiny.TinyElementImplからのオブジェクトであり、それは多分私ドンので、VirtualNodeにキャストすることはできませんDocumentBuilder.Wrap(XmlDocument)をDocumentBuilder.Build(XmlReader)でロードしますか?

XmlReaderを使用するメソッドは、XmlDocumentバージョンよりも高速です。 XdmNodeから行番号と列を取得するにはどうすればよいですか?

(a)は、.NET上XdmNodeがLINENUMBERとColumnNumberに性質を持っていない、そのJavaの同等とは違っ:オニールの応答に追加する

+1

バグを報告してくれてありがとう。現在、問題を調査中です。ここにバグの問題が提起されています:https://saxonica.plan.io/issues/2834 – ond1

+0

Saxonの次のメンテナンスリリースでコミットされ、利用可能な修正 – ond1

答えて

0

。これらを追加します。もちろん、行番号情報が利用可能な場合にのみ、プロパティは有用なものを返します。

(b)これらのプロパティがない場合は、XdmNode.Implementation.getLineNumber()とXdmNode.Implementation.getColumnNumber()を使用できます。

(c)DocumentBuilderにIsLineNumberingプロパティが設定されていない限り、行/列情報は維持されません。

(d)上記の注意事項では、Uri、Stream、またはTextReaderからドキュメントを作成する場合は、デフォルトの設定オプションを使用して行/列番号を指定する必要があります(具体的には、組み込みのXercesパーサーがXML文書を解析するためにXmlReaderを使用すると、MSパーサーからSaxon生成ノードに行/列情報を取得しようとするSaxonコードがありますが、最初のテストではそれがうまくいかないかもしれないと示唆している