Java 哈希图 XSLT
Java Hashmap XSLT
我正在处理 XML 文件,这些文件是 Java HashMap 的打印输出,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_05" class="java.beans.XMLDecoder">
<object class="java.util.HashMap">
<void method="put">
<string>ENTRY</string>
<string>01/02/2002</string>
</void>
<void method="put">
<string>DOC</string>
<long>3315959</long>
</void>
<void method="put">
<string>DOC_CLASS_NUMBER</string>
<int>4</int>
</void>
<void method="put">
<string>ACCESS_PRIV</string>
<string>3,18,81</string>
</void>
</object>
</java>
我需要将元素加载到 MS Access 数据库中。所以我正在研究 XSLT 来转换 xml 所以我会得到类似下面的东西(所以导入到 ms 访问中是可能的):
<file>
<Entry>01/02/2002</entry>
<DOC>1335959</DOC>
<DOC_CLASS_NUMBER>4</DOC_CLASS_NUMBER>
<ACCESS_RIGHTS>3,18,81</ACCESS_RIGHTS>
</file>
我一直在尝试这个,因为我无法寻址父节点(我认为)但我只检索第一个元素:
<xsl:for-each select="*">
<tr>
<td><xsl:value-of select="//string[1]"/></td>
<td><xsl:value-of select="//string[1]/following-sibling::*"/></td>
</tr>
</xsl:for-each>
有什么办法可以解决这个问题吗?
我真的很难理解为什么你显示的小代码片段会输出 HTML 个元素,如果你期望的输出与 HTML.
无关
XSLT 样式表
匹配object
,输出一个file
元素。然后,一般匹配 void
并为 ACCESS_PRIV
定义另一个模板,因为那里无法从输入中扣除输出元素的名称。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="object">
<file>
<xsl:apply-templates/>
</file>
</xsl:template>
<xsl:template match="void">
<xsl:element name="{string[1]}">
<xsl:value-of select="*[2]"/>
</xsl:element>
</xsl:template>
<xsl:template match="void[string[1] = 'ACCESS_PRIV']">
<ACCESS_RIGHTS>
<xsl:value-of select="*[2]"/>
</ACCESS_RIGHTS>
</xsl:template>
</xsl:transform>
XML输出
这 几乎 与您的预期输出相同,因为您的预期输出格式不正确 XML。注意,XML 区分大小写,Entry
与 entry
不同。
<file>
<ENTRY>01/02/2002</ENTRY>
<DOC>3315959</DOC>
<DOC_CLASS_NUMBER>4</DOC_CLASS_NUMBER>
<ACCESS_RIGHTS>3,18,81</ACCESS_RIGHTS>
</file>
我正在处理 XML 文件,这些文件是 Java HashMap 的打印输出,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_05" class="java.beans.XMLDecoder">
<object class="java.util.HashMap">
<void method="put">
<string>ENTRY</string>
<string>01/02/2002</string>
</void>
<void method="put">
<string>DOC</string>
<long>3315959</long>
</void>
<void method="put">
<string>DOC_CLASS_NUMBER</string>
<int>4</int>
</void>
<void method="put">
<string>ACCESS_PRIV</string>
<string>3,18,81</string>
</void>
</object>
</java>
我需要将元素加载到 MS Access 数据库中。所以我正在研究 XSLT 来转换 xml 所以我会得到类似下面的东西(所以导入到 ms 访问中是可能的):
<file>
<Entry>01/02/2002</entry>
<DOC>1335959</DOC>
<DOC_CLASS_NUMBER>4</DOC_CLASS_NUMBER>
<ACCESS_RIGHTS>3,18,81</ACCESS_RIGHTS>
</file>
我一直在尝试这个,因为我无法寻址父节点(我认为)但我只检索第一个元素:
<xsl:for-each select="*">
<tr>
<td><xsl:value-of select="//string[1]"/></td>
<td><xsl:value-of select="//string[1]/following-sibling::*"/></td>
</tr>
</xsl:for-each>
有什么办法可以解决这个问题吗?
我真的很难理解为什么你显示的小代码片段会输出 HTML 个元素,如果你期望的输出与 HTML.
无关XSLT 样式表
匹配object
,输出一个file
元素。然后,一般匹配 void
并为 ACCESS_PRIV
定义另一个模板,因为那里无法从输入中扣除输出元素的名称。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="object">
<file>
<xsl:apply-templates/>
</file>
</xsl:template>
<xsl:template match="void">
<xsl:element name="{string[1]}">
<xsl:value-of select="*[2]"/>
</xsl:element>
</xsl:template>
<xsl:template match="void[string[1] = 'ACCESS_PRIV']">
<ACCESS_RIGHTS>
<xsl:value-of select="*[2]"/>
</ACCESS_RIGHTS>
</xsl:template>
</xsl:transform>
XML输出
这 几乎 与您的预期输出相同,因为您的预期输出格式不正确 XML。注意,XML 区分大小写,Entry
与 entry
不同。
<file>
<ENTRY>01/02/2002</ENTRY>
<DOC>3315959</DOC>
<DOC_CLASS_NUMBER>4</DOC_CLASS_NUMBER>
<ACCESS_RIGHTS>3,18,81</ACCESS_RIGHTS>
</file>