Java 解析XML并根据优先级列表更改数据

Java 解析XML并根据优先级列表更改数据,java,xml,xpath,Java,Xml,Xpath,我想使用Java的优先级列表动态读取和修改XML数据。在处理XML数据时,程序应将当前节点与优先级列表相匹配,并根据此列表决定要为节点执行的操作。列表如下所示: 对于这样的XML: 子1数据1值 子1数据2值 子2数据1值 子2数据2值 这个概念的问题是我不能“反转”XPath逻辑(XPath选择节点,我需要匹配已经选择的节点)。有什么方便的方法可以做到这一点吗?XSLT允许您编写模板并给它们优先级,例如,…,因此,也许XSLT是您正在寻找的解决方案。@MartinHonnen也考虑过使

我想使用Java的优先级列表动态读取和修改XML数据。在处理XML数据时,程序应将当前节点与优先级列表相匹配,并根据此列表决定要为节点执行的操作。列表如下所示:

对于这样的XML:


子1数据1值
子1数据2值
子2数据1值
子2数据2值

这个概念的问题是我不能“反转”XPath逻辑(XPath选择节点,我需要匹配已经选择的节点)。有什么方便的方法可以做到这一点吗?

XSLT允许您编写模板并给它们优先级,例如,
,因此,也许XSLT是您正在寻找的解决方案。@MartinHonnen也考虑过使用XSLT。令人担忧的是xslt可能会变得非常混乱和不可读,但我将再次对此进行研究。XSLT仅基于优先级应用一个模板,对吗?适用于Java和Saxon 9的XSLT 2.0具有
,这将允许您应用下一个匹配的优先级较低的模板。XSLT允许您编写模板并为它们赋予优先级,例如,
因此,也许XSLT是您正在寻找的解决方案。@MartinHonnen也考虑过使用XSLT。令人担忧的是xslt可能会变得非常混乱和不可读,但我将再次对此进行研究。XSLT仅基于优先级应用一个模板,对吗?可用于Java和Saxon 9的XSLT 2.0具有
,这将允许您应用下一个优先级较低的匹配模板。
/root/child[1]/data1;   action1
/root/child/data1;      action2
/root/child/*;          action3
//*;                    generic action
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <child>
        <data1>child 1 data1 value</data1>
        <data2>child 1 data2 value</data2>
    </child>
    <child>
        <data1>child 2 data1 value</data1>
        <data2>child 2 data2 value</data2>
    </child>
</root>