我在Java中使用XmlDocument
解析器创建了一个Weblogic XmlDocument
。>>
我想用我自己的数据替换此XMLDocument
中标签的内容,或插入不存在的标签。
<customdata> <tag1 /> <tag2>mfkdslmlfkm</tag2> <location /> <tag3 /> </customdata>
例如,我想在位置标记中插入URL:
<location>http://something</location>
但是要保留XML不变。
当前我使用XMLCursor
:
XmlObject xmlobj = XmlObject.Factory.parse(a.getCustomData(), options); XmlCursor xmlcur = xmlobj.newCursor(); while (xmlcur.hasNextToken()) { boolean found = false; if (xmlcur.isStart() && "schema-location".equals(xmlcur.getName().toString())) { xmlcur.setTextValue("http://replaced"); System.out.println("replaced"); found = true; } else if (xmlcur.isStart() && "customdata".equals(xmlcur.getName().toString())) { xmlcur.push(); } else if (xmlcur.isEnddoc()) { if (!found) { xmlcur.pop(); xmlcur.toEndToken(); xmlcur.insertElementWithText("schema-location", "http://inserted"); System.out.println("inserted"); } } xmlcur.toNextToken(); }
由于
xquery
具有XmlDocument
方法,所以我试图找到一种“快速”的execQuery
方法,但是并没有发现它很容易。
没有人能比这更好的方法吗?似乎有点复杂。
我有一个用Weblogic XmlDocument解析器创建的Java XmlDocument。我想用自己的数据替换此XMLDocument中标签的内容,或者如果不存在则插入标签。 <...>
基于XPath的方法怎么样?我喜欢这种方法,因为逻辑非常容易理解。该代码几乎是自我记录的。
面向对象的方法怎么样?您可以将XML反序列化为对象,在对象上设置位置值,然后序列化回XML。
如果您不了解架构,那么XStream解决方案可能不是您的最佳选择。至少现在您正在关注XStream,将来可能会派上用场!
您应该可以通过query
执行此操作