我在尝试转换以下XML时遇到错误:
<triggers>
<add status="Success">
<from>
<ref:setting name = ".technicalContactEmail"/>
</from>
<recipients>
<ref:maintenanceJob out="creatorEmail"/>
</recipients>
<subject> Your download has been prepared</subject>
<body>
<ref:downloadOrderInfo out="downloadsUrl" store="@downloadsUrl"/>
<div style="color: #5C9731; font-size: 18pt; font-family: tahoma; margin-bottom: 15px;"> Your <ref:downloadOrderInfo out="fileNameLabel"/> (<ref:downloadOrderInfo out="fileName"/>) has been prepared. Please go to <a href="@downloadsUrl">My downloads page</a> in XXXX to download it.</div>
<br/>
<div>***This is an automatically generated email, please do not reply to this message. ***</div>
</body>
</add>
<add status="PartiallyFailed, Failed">
<from>
<ref:setting name = ".technicalContactEmail"/>
</from>
<recipients>
<ref:maintenanceJob out="creatorEmail"/>
</recipients>
<subject> Error when preparing download</subject>
<body>
<ref:downloadOrderInfo out="downloadsUrl" store="@downloadsUrl"/>
<div style="color: #5C9731; font-size: 18pt; font-family: tahoma; margin-bottom: 15px;"> An error occurred while preparing the <ref:downloadOrderInfo out="fileNameLabel"/>: <ref:downloadOrderInfo out="fileName"/>. You can retry and request the download again on the <a href="@downloadsUrl">My downloads page</a> in XXXX.</div>
<br/>
<div>***This is an automatically generated email, please do not reply to this message. ***</div>
</body>
</add>
使用此XLST脚本:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="from"/>
</xsl:stylesheet>
目标是从&#34;中移除&#34; XML标记,但我遇到了错误 前缀&#34; ref&#34;对于元素&#34; ref:setting&#34;不受约束。
请注意,我不能仅仅修改XML条目XSLT。
答案 0 :(得分:0)
如果源XML包含名称空间,则必须指定它们, 例如在根标记中。否则这样的XML具有不正确的结构。
在您的情况下,有一个名称空间 - ref
,因此请更改您的triggers
标记为例如。
<triggers xmlns:ref="dummy.com">
(或其他URN),它会没问题。
注意:如果您的XSLT脚本包含对任何命名空间的引用 在源XML中,您还必须在XSLT中指定此命名空间。
答案 1 :(得分:0)
XSLT不会帮助您转换那些格式不正确的XML。
当你得到错误的XML时,首先应该考虑的是,这是从哪里来的,我们能否在未来修复源代码以生成优秀的XML?
如果您无法解决问题,您应该担心您依赖供应商提供有缺陷的商品。
如果最糟糕的情况发生,您可以考虑修复错误的XML。修复策略取决于腐败的规律性和可预测性,以及适当的修复措施。遗憾的是,您可能不得不使用非XML工具(例如Perl脚本)进行修复工作,因为大多数XML工具只能使用格式良好的XML。
使用HTML Tidy或validator.nu等工具可以实现某些修复。在这种情况下,我不知道他们是否会帮助你。
在这种特殊情况下,我可能会通过添加一行来进行修复
<wrapper xmlns:ref="something">
在顶部和相应的
</wrapper>
在底部,然后使用XSLT完成剩余的工作。
答案 2 :(得分:0)
我还在顶部根据Valdi_Bo建议的XSLT添加了此代码,现在它可以正常工作。 我建议管理层我们需要添加XML的引用。 感谢。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ref="dummy.com">