除了使用扩展之外,如何处理 XSLT 中的自定义命名空间?
How to handle custom Namespaces in XSLT other than using extensions?
我有以下 xsml 文件
<?xml version="1.0" encoding="UTF-8"?>
<gas-xml xmlns="http://gas-xml.de/3.2/gas-xml">
<body>
<data>
<voplist object-id="someID" period="hour" values-per-period="1" >
<vopset quantity="Vbus">
<vop i="0" state="">0</vop>
<vop i="1" state="">0</vop>
<vop i="2" state="">0</vop>
</vopset>
</voplist>
</data>
</body>
</gas-xml>
我尝试使用以下代码将其转换为另一个 xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<body>
<timeseries dateformat="yyyy-MM-dd'T'HH:mm:ssZ" freq="Hourly" valuealign="left">
<xsl:for-each select="/body/data/voplist/vopset/vop">
<value>
<xsl:attribute name="time">
<xsl:value-of select="@i"/>
</xsl:attribute>
</value>
</xsl:for-each>
</timeseries>
</body>
</xsl:template>
</xsl:stylesheet>
但命名空间 <gas-xml xmlns="http://gas-xml.de/3.2/gas-xml">
以某种方式不允许 for-each 读取 xml 文件,因为当我从命名空间中删除 xmlns="http://gas-xml.de/3.2/gas-xml
部分时它工作正常。我使用了带扩展的方法,但我正在使用的系统不允许扩展。所以我正在寻找另一种解决方案而不是使用扩展。
在 xslt 中使用命名空间 (xmlns="http://gas-xml.de/3.2/gas-xml")
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:a="http://gas-xml.de/3.2/gas-xml"
exclude-result-prefixes="a"
version="1.0">
<xsl:template match="/">
<body>
<timeseries dateformat="yyyy-MM-dd'T'HH:mm:ssZ" freq="Hourly" valuealign="left">
<xsl:for-each select="//a:body/a:data/a:voplist/a:vopset/a:vop">
<value>
<xsl:attribute name="time">
<xsl:value-of select="@i"/>
</xsl:attribute>
</value>
</xsl:for-each>
</timeseries>
</body>
</xsl:template>
</xsl:stylesheet>
处的转换
我有以下 xsml 文件
<?xml version="1.0" encoding="UTF-8"?>
<gas-xml xmlns="http://gas-xml.de/3.2/gas-xml">
<body>
<data>
<voplist object-id="someID" period="hour" values-per-period="1" >
<vopset quantity="Vbus">
<vop i="0" state="">0</vop>
<vop i="1" state="">0</vop>
<vop i="2" state="">0</vop>
</vopset>
</voplist>
</data>
</body>
</gas-xml>
我尝试使用以下代码将其转换为另一个 xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<body>
<timeseries dateformat="yyyy-MM-dd'T'HH:mm:ssZ" freq="Hourly" valuealign="left">
<xsl:for-each select="/body/data/voplist/vopset/vop">
<value>
<xsl:attribute name="time">
<xsl:value-of select="@i"/>
</xsl:attribute>
</value>
</xsl:for-each>
</timeseries>
</body>
</xsl:template>
</xsl:stylesheet>
但命名空间 <gas-xml xmlns="http://gas-xml.de/3.2/gas-xml">
以某种方式不允许 for-each 读取 xml 文件,因为当我从命名空间中删除 xmlns="http://gas-xml.de/3.2/gas-xml
部分时它工作正常。我使用了带扩展的方法,但我正在使用的系统不允许扩展。所以我正在寻找另一种解决方案而不是使用扩展。
在 xslt 中使用命名空间 (xmlns="http://gas-xml.de/3.2/gas-xml")
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:a="http://gas-xml.de/3.2/gas-xml"
exclude-result-prefixes="a"
version="1.0">
<xsl:template match="/">
<body>
<timeseries dateformat="yyyy-MM-dd'T'HH:mm:ssZ" freq="Hourly" valuealign="left">
<xsl:for-each select="//a:body/a:data/a:voplist/a:vopset/a:vop">
<value>
<xsl:attribute name="time">
<xsl:value-of select="@i"/>
</xsl:attribute>
</value>
</xsl:for-each>
</timeseries>
</body>
</xsl:template>
</xsl:stylesheet>
处的转换