我有从XSD生成的XmlBeans类。我想跟踪持久对象的行号。这可能吗?我不在乎此信息是在解析期间(xml→Bean)还是在prettyprinting(beans→xml)期间存储的,因为我在应用程序流程中将它们保持同步。
如果可能的话,我想要开始和结束行/列号。
我不在乎是否必须使用某种非标准的技巧来获取定位器数据。
如果有另一个Java XML框架可以从XSD文件生成类并支持定位器数据,那么我愿意切换。
最佳答案
只需使用XmlOptions#setLoadLineNumbers(),例如:
MyDocument.Factory.parse(xmlFile, new XmlOptions().setLoadLineNubmers());
然后,要从xml存储中检索行号,请找到最近的XmlLineNumber书签。
import org.apache.xmlbeans.*;
public class linenumber
{
public static void main(String[] args) throws XmlException
{
XmlOptions options = new XmlOptions().setLoadLineNumbers();
XmlObject xobj = XmlObject.Factory.parse("<a>\n<b>test</b>\n<c>test</c>\n</a>", options);
// let's get the line number for the '<c>' xml object
XmlObject cobj = xobj.selectPath(".//c")[0];
System.out.println(cobj.xmlText());
XmlCursor c = null;
try
{
c = cobj.newCursor();
// search for XmlLineNumber bookmark
XmlLineNumber ln =
(XmlLineNumber) c.getBookmark( XmlLineNumber.class );
if (ln == null)
ln = (XmlLineNumber) c.toPrevBookmark( XmlLineNumber.class );
if (ln != null)
{
int line = ln.getLine();
int column = ln.getColumn();
int offset = ln.getOffset();
System.out.println("line=" + line + ", col=" + column + ", offset=" + offset);
}
}
finally
{
if (c != null) c.dispose();
}
}
}
关于java - 读/写期间的XmlBeans源定位器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10241929/