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 区分大小写,Entryentry 不同。

<file>
   <ENTRY>01/02/2002</ENTRY>
   <DOC>3315959</DOC>
   <DOC_CLASS_NUMBER>4</DOC_CLASS_NUMBER>
   <ACCESS_RIGHTS>3,18,81</ACCESS_RIGHTS>
</file>