Java 如何使用xpath编辑特定的xml

Java 如何使用xpath编辑特定的xml,java,xml,xslt,xpath,jsonpath,Java,Xml,Xslt,Xpath,Jsonpath,下面是使用xslt函数json-to-xml()生成的xml。我需要使用给定的XPath更新此xml,如结果xml所示。我需要java或xslt的解决方案。任何帮助都将不胜感激 XML <?xml version="1.0" encoding="UTF-8"?> <map xmlns="http://www.w3.org/2005/xpath-functions"> <map key="Response"> &

下面是使用xslt函数json-to-xml()生成的xml。我需要使用给定的XPath更新此xml,如结果xml所示。我需要java或xslt的解决方案。任何帮助都将不胜感激

XML

 <?xml version="1.0" encoding="UTF-8"?>
    <map xmlns="http://www.w3.org/2005/xpath-functions">
        <map key="Response">
            <map key="Headers">
                <string key="server">Lisa</string>
                <string key="Status-Code">200</string>
                <string key="Content-Type">applicaton/json</string>
            </map>
            <map key="Payload">
                <map key="root">
                    <array key="cars">
                        <map>
                            <string key="company">ccc</string>
                            <string key="model">mmm</string>
                        </map>
                        <map>
                            <string key="strength">666</string>
                            <string key="Capacity">333</string>
                        </map>
                    </array>
                    <array key="bikes">
                        <map>
                            <string key="company">abc</string>
                            <string key="model">2018</string>
                        </map>
                    </array>
                </map>
            </map>
        </map>
    </map>
<map xmlns="http://www.w3.org/2005/xpath-functions">
    <map key="Response">
        <map key="Headers">
            <string key="server">WebSphere</string>
            <string key="Status-Code">400</string>
            <string key="Content-Type">text</string>
        </map>
        <map key="Payload">
            <map key="root">
                <array key="cars">
                    <map>
                        <string key="company">ccc1</string>
                        <string key="model">mmm1</string>
                    </map>
                    <map>
                        <string key="strength">999</string>
                        <string key="Capacity">555</string>
                    </map>
                </array>
                <array key="bikes">
                    <map>
                        <string key="company">xyz</string>
                        <string key="model">2019</string>
                    </map>
                </array>
            </map>
        </map>
    </map>
</map>
更新的结果XML

 <?xml version="1.0" encoding="UTF-8"?>
    <map xmlns="http://www.w3.org/2005/xpath-functions">
        <map key="Response">
            <map key="Headers">
                <string key="server">Lisa</string>
                <string key="Status-Code">200</string>
                <string key="Content-Type">applicaton/json</string>
            </map>
            <map key="Payload">
                <map key="root">
                    <array key="cars">
                        <map>
                            <string key="company">ccc</string>
                            <string key="model">mmm</string>
                        </map>
                        <map>
                            <string key="strength">666</string>
                            <string key="Capacity">333</string>
                        </map>
                    </array>
                    <array key="bikes">
                        <map>
                            <string key="company">abc</string>
                            <string key="model">2018</string>
                        </map>
                    </array>
                </map>
            </map>
        </map>
    </map>
<map xmlns="http://www.w3.org/2005/xpath-functions">
    <map key="Response">
        <map key="Headers">
            <string key="server">WebSphere</string>
            <string key="Status-Code">400</string>
            <string key="Content-Type">text</string>
        </map>
        <map key="Payload">
            <map key="root">
                <array key="cars">
                    <map>
                        <string key="company">ccc1</string>
                        <string key="model">mmm1</string>
                    </map>
                    <map>
                        <string key="strength">999</string>
                        <string key="Capacity">555</string>
                    </map>
                </array>
                <array key="bikes">
                    <map>
                        <string key="company">xyz</string>
                        <string key="model">2019</string>
                    </map>
                </array>
            </map>
        </map>
    </map>
</map>

WebSphere
400
文本
库来解析/更改给定XPath上的json值。最后使用xslt函数将json再次更改为xml。这对我来说很有魅力!!
但是在使用这个库之后,我开始在我的应用程序的其他部分遇到问题:(.所有带有json请求体的post请求开始给出400错误。错误是“错误400客户端发送的请求在语法上不正确”。我无法理解问题,可能是由于不同的jar限制。

因此,我正在尝试其他方法。任何其他库,如Jayway JsonPath?或任何其他解决方案/建议,都会有很大帮助。

给定XSLT 3的一种方法可能是将这些路径转换为XSLT 3匹配模板,然后创建一个可以使用
transform
函数()执行的样式表:


/响应/有效载荷/根/车辆[2]/强度=999
/响应/有效负载/根/自行车[1]/型号=2019
/响应/Headers/server=WebSphere
/响应/标题/内容类型=文本
/响应/有效载荷/根/车辆[2]/容量=555
/响应/有效载荷/根/车辆[1]/型号=mmm1
/响应/有效负载/根/自行车[1]/company=xyz
/响应/有效载荷/根/车辆[1]/公司=ccc1
/响应/标题/状态代码=400
我得到了想要的结果

<?xml version="1.0" encoding="UTF-8"?>
<map xmlns="http://www.w3.org/2005/xpath-functions">
    <map key="Response">
        <map key="Headers">
            <string key="server">WebSphere</string>
            <string key="Status-Code">400</string>
            <string key="Content-Type">text</string>
        </map>
        <map key="Payload">
            <map key="root">
                <array key="cars">
                    <map>
                        <string key="company">ccc1</string>
                        <string key="model">mmm1</string>
                    </map>
                    <map>
                        <string key="strength">999</string>
                        <string key="Capacity">555</string>
                    </map>
                </array>
                <array key="bikes">
                    <map>
                        <string key="company">xyz</string>
                        <string key="model">2019</string>
                    </map>
                </array>
            </map>
        </map>
    </map>
</map>

WebSphere
400
文本
ccc1
mmm1
999
555
xyz
2019

这样,尽管我不得不将路径(包括
自行车
调整为
自行车[1]

再次感谢Martin。感谢您的支持。您的解决方案非常有效。:)