2016-07-12 34 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獲取行號和列?

+1

感謝您報告錯誤。我們目前正在調查問題。它已經在這裏提出了一個錯誤問題:https://saxonica.plan.io/issues/2834 – ond1

+0

修復已提交併在Saxon的下一個維護版本中可用 – ond1

回答

0

要添加到奧尼爾的回答是:

(一)在.NET XdmNode沒有LineNumber上,並得到columnnumber性質,不同於它的Java等價物。我們將添加這些。但是,如果行號信息可用,這些屬性當然只會返回任何有用的信息。 (b)如果不存在這些屬性,可以使用XdmNode.Implementation.getLineNumber()和XdmNode.Implementation.getColumnNumber()。

(c)除非在DocumentBuilder上設置了IsLineNumbering屬性,否則不會保留行/列信息。 (d)如果您使用默認配置選項(如果使用內置的Xerces分析器來構建Uri或Stream或TextReader中的文檔,則行/列編號應該可以工作解析XML文件)

(e)當使用XmlReader解析文檔時,會出現撒克遜代碼,它試圖從MS解析器獲取行/列信息到Saxon構造的節點中,但是我們的初始測試建議它可能不工作。