我已使用JAXB将我的XSD文件转换为JAVA对象。
接下来我做的是将xml文件解组为这些对象。
现在我的目标是添加,删除,搜索XML中的一些节点。
我发现在JAXB中很难做到这一点。
例如,我想匹配任何属性名称为" weight"
我如何在JAXB对象中执行此操作?
在dom XML中,这种搜索/更新/删除非常简单。
我如何在JAXB中执行此操作?
或者例如
我有一个属性名称来匹配"重量"它的类型为interfaceClass。
<CAEXFile>
<InterfaceCLASSLIB>
<interfaceclass>
<attribute name="weight>
<../>
所以为了访问接口类。
我将不得不浏览所有对象层次结构。
CAEXFile ---&gt;获取InterfaceClassLib()---&gt; getInterfaceClass() - &GT; gettAttributes();
注意每个get方法都返回一个List of Array,因为可以有很多接口类,属性为e.t.c。
这是一种非常昂贵的方法。
我没有找到任何预定义的函数来访问特定节点。
任何帮助将不胜感激。应该转回DOM-XML for xml insert delete update。?
答案 0 :(得分:1)
正如您所说,使用JAXB搜索节点非常昂贵。我会使用XPathFactory作为标准Java的一部分来获取所需的节点。 如下所示:
public static void main(String[] args) throws Exception
{
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
InputSource xml = new InputSource("<your_path_to_input.xml>");
Object result = (Object) xpath.evaluate("//attribute[@name=\"weight\"]", xml, XPathConstants.NODESET);
if ( result != null && result instanceof NodeList )
{
NodeList nodeList = (NodeList)result;
if ( nodeList.getLength() > 0 )
{
for ( int i = 0; i < nodeList.getLength(); i++ )
{
org.w3c.dom.Node node = nodeList.item( i );
System.out.println(node.getNodeValue());
}
}
}
}
xpath是//attribute[@name="weight"]
,它以递归方式在xml中搜索attribute
个节点,这些节点的属性名为name
,值为weight