Java 使用奇怪的标记编译样式表XSL<;答:标签>;

Java 使用奇怪的标记编译样式表XSL<;答:标签>;,java,xml,parsing,xslt,xml-parsing,Java,Xml,Parsing,Xslt,Xml Parsing,以下是我的java XML文件和方法: 测试.xml <?xml version="1.0" encoding="UTF-8"?> <orders> <orderDetails> <a:orderDetails6> <a:MsgId>text1</a:MsgId> <a:PartnerId>text1</a:PartnerId>

以下是我的java XML文件和方法:

测试.xml

<?xml version="1.0" encoding="UTF-8"?>
<orders>
    <orderDetails>
        <a:orderDetails6>
            <a:MsgId>text1</a:MsgId>
            <a:PartnerId>text1</a:PartnerId>
            <a:OrderId>text1</a:OrderId>                        
        </a:orderDetails6>
    </orderDetails>
</orders>
样式.xsl

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" >

<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>

    <xsl:template match="/">
    <xsl:text>A:MsgId,A:PartnerId,A:OrderId
</xsl:text>     
        <xsl:for-each select="//orderDetails">
            <xsl:for-each select="//a:orderDetails6">
                <xsl:value-of select="concat(a:MsgId,',',a:PartnerId,',',a:OrderId,'&#xA;')"/>
            </xsl:for-each>
        </xsl:for-each> 
    </xsl:template>
</xsl:stylesheet>

A:MsgId,A:PartnerId,A:OrderId
如果转换为XML和XLS,我有普通标记,如:

[MsgID]、[PartnerID]、[orderDetails6]工作正常

但是我的XML有一个alwyas标记,起始于:[a:…]


知道如何解决吗?

XSLT的XML输入需要格式良好。这意味着,如果它使用一个限定名称,如
,则需要在名称空间声明中声明前缀(
a
),例如
xmlns:a=“some.uri”
。从技术上讲,您的XML符合XML规范,但不符合XML名称空间规范,但XSLT(和许多其他XML处理软件)要求两者都符合


您还需要在样式表中声明名称空间。除非在命名空间声明中声明前缀
a
,否则不能使用类似
//a:orderDetails
的路径表达式。(相反,您不需要
xmlns:fo
声明,因为前缀
fo
从未使用过。)

您能给我一个示例吗?如何更正它取决于您使用的XML词汇表是否有某种规范。如果您只是编出来的,可以随意更改,最简单的方法就是完全删除名称空间前缀。即使标记有前缀,我也不需要将其放入xsl中?
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" >

<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>

    <xsl:template match="/">
    <xsl:text>A:MsgId,A:PartnerId,A:OrderId
</xsl:text>     
        <xsl:for-each select="//orderDetails">
            <xsl:for-each select="//a:orderDetails6">
                <xsl:value-of select="concat(a:MsgId,',',a:PartnerId,',',a:OrderId,'&#xA;')"/>
            </xsl:for-each>
        </xsl:for-each> 
    </xsl:template>
</xsl:stylesheet>