前缀" ref"对于元素" ref:setting"不受约束

时间:2017-11-23 09:45:15

标签: xml xslt

我在尝试转换以下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。

3 个答案:

答案 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">