xslt - 使用 XSLT 为同一 XML 层次结构中的多个子节点添加父节点
问题描述
我有一个场景,我的输入如下,这是无效的 Xml 解析和下面添加的预期输出请帮助我获得所需的输出
<MessageHeader>
<ServiceInitiatorKey>000</ServiceInitiatorKey>
<ServiceProviderKey>SADAD-001</ServiceProviderKey>
<ServiceConsumerId>000</ServiceConsumerId>
<RqUID>4lkuo5bi-8e98-8bnn-32ge-ep3a6eiss241</RqUID>
<Date>2020-00-00T00:00:00</Date>
<Lang>en-gb</Lang>
</MessageHeader><LoadRq>
<Timestamp>2020-00-00T00:00:00</Timestamp>
<Payment>
<BillerId>000</BillerId>
<CurAmt>0</CurAmt>
<PrcDt>2020-00-00T00:00:00</PrcDt>
<DueDt>2020-00-00T00:00:00</DueDt>
<BillerPmtId>000000</BillerPmtId>
<PaymentRef>
<BillNumberWithAccount>
<BillingAcct>0000000000</BillingAcct>
<BillNumber>0000000000</BillNumber>
</BillNumberWithAccount>
</PaymentRef>
</Payment>
</LoadRq>
预期输出如下
<?xml version="1.0" encoding="UTF-8"?>
<root>
<MessageHeader>
<ServiceInitiatorKey>000</ServiceInitiatorKey>
<ServiceProviderKey>SADAD-001</ServiceProviderKey>
<ServiceConsumerId>000</ServiceConsumerId>
<RqUID>4lkuo5bi-8e98-8bnn-32ge-ep3a6eiss241</RqUID>
<Date>2020-00-00T00:00:00</Date>
<Lang>en-gb</Lang>
</MessageHeader><LoadRq>
<Timestamp>2020-00-00T00:00:00</Timestamp>
<Payment>
<BillerId>000</BillerId>
<CurAmt>0</CurAmt>
<PrcDt>2020-00-00T00:00:00</PrcDt>
<DueDt>2020-00-00T00:00:00</DueDt>
<BillerPmtId>000000</BillerPmtId>
<PaymentRef>
<BillNumberWithAccount>
<BillingAcct>0000000000</BillingAcct>
<BillNumber>0000000000</BillNumber>
</BillNumberWithAccount>
</PaymentRef>
</Payment>
</LoadRq>
解决方案
在 XSLT/XPath 3 中有一个函数parse-xml-fragment
,所以使用例如
<xsl:template name="xsl:initial-template">
<root>
<xsl:sequence select="parse-xml-fragment(unparsed-text('your-file.xml'))"/>
</root>
</xsl:template>
应该允许您添加一个包装器元素。您将使用命名模板开始转换(例如-it
,Saxon 9/10 的命令行选项)。
推荐阅读
- java - 尝试以编程方式创建表时出现 java.lang.NullPointerException 错误
- java - Java MineSweeper 未将炸弹数向右
- javascript - 将此 NodeJs 套接字连接转换为 Python
- java - 反应堆核心:无限通量不适用于多个订阅者
- time-complexity - 快速排序欧米茄符号
- python - 有界的正态变量?
- surveyjs - 如何使用 POST 设置 SurveyJS 调查的结果?
- mysql - 错误 1415:不允许从函数返回结果集
- android - Android 应用程序在创建数据库时停止
- where-clause - 关键字 - FFL: Where vs. Let