如果我有一个指定名称空间的XML文件,例如
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
version="3.1">
<enterprise-beans>
<session>
<ejb-name>Manager</ejb-name>
<ejb-class>com.something.ManagerBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<ejb-local-ref>
<ejb-ref-name>Manager</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local-home>com.something.ManagerLocalHome</local-home>
<local>com.something.ManagerLocal</local>
<ejb-link>Manager</ejb-link>
</ejb-local-ref>
</session>
</enterprise-beans>
</ejb-jar>
例如,我想仅使用XSLT提取名称,
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://java.sun.com/xml/ns/javaee"
version="1.0"
>
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/ejb-jar/enterprise-beans/session">
<session>
<xsl:value-of select="ejb-name"/>
</session>
</xsl:template>
</xsl:stylesheet>
我想念什么?如果我删除了源代码的xmlns
,则此转换似乎可以正常工作-如何将其保留并继续运行转换?
我期待着这样的事情:
<session>
Manager
</session>
<session>
Manager2
</session>
...
(真的只是想弄清楚名称空间的问题)
答案 0 :(得分:1)
假设您需要返回 ejb-name 和 ejb-ref-name 元素,请考虑将诸如 doc 之类的名称空间前缀添加到您的XSLT用作对元素的引用。 XPath descendant::*
用于查找嵌套在 session 中的名称。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:doc="http://java.sun.com/xml/ns/javaee"
exclude-result-prefixes="doc"
version="1.0">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/doc:ejb-jar/doc:enterprise-beans">
<session>
<xsl:apply-templates select="doc:session"/>
</session>
</xsl:template>
<xsl:template match="doc:session">
<name><xsl:value-of select="descendant::doc:ejb-name"/></name>
<name><xsl:value-of select="descendant::doc:ejb-ref-name"/></name>
</xsl:template>
</xsl:stylesheet>
输出
<session>
<name>Manager</name>
<name>Manager</name>
</session>