【问题标题】:xsl to xml transformation adding non existing field?xsl 到 xml 转换添加不存在的字段?
【发布时间】:2015-09-23 06:47:41
【问题描述】:

我有数千个 xsl 文件,我需要对它们进行转换以便在 Solr 中对它们进行索引。我已经这样做了,但我需要每个文件都有一个与文件名相同的字段 ID。 文件如下所示:

<TEXT>&#2;
<TITLE>A Title</TITLE>
<DATELINE>    A Dateline </DATELINE>
<BODY> text </BODY>
</TEXT>

例如:我的文件名类似于“0001.xsl”、“0002.xsl”..等。 我需要有类似的东西:

<?xml version="1.0" encoding="UTF-8"?>
<add>
    <doc>
        <field name="ID">0001</field>
        <field name="TITLE">-a tile-</field>
        <field name="DATELINE">-a dateline-</field>
        <field name="BODY"> -text-</field>
</field>
    </doc>
</add>

这是样式表:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  

  <!-- use this for debugging only -->
  <!-- <xsl:output method="xml" indent="yes"/> -->

  <xsl:template match="*"> 
    <xsl:element name="field">
      <xsl:attribute name="name">
        <xsl:value-of select="name()"/>
      </xsl:attribute>
      <xsl:value-of select="."/>
    </xsl:element>
  </xsl:template>

  <xsl:template match="/">
    <add>
      <doc>        
        <xsl:apply-templates select="//TEXT/*"/>
      </doc>
    </add>
  </xsl:template>

</xsl:stylesheet>

我该怎么做呢?我是否需要更改样式表,或者我可以在读取文件名后使用 Java 添加特定字段? 我正在使用 Java 来转换文件并为它们编制索引。

【问题讨论】:

  • 你能把文件名作为参数传递给样式表吗?还是切换到 XSLT 2.0 处理器?

标签: java xml xslt indexing solr


【解决方案1】:

当您使用 Java 时,您可以切换到 Saxon 和 XSLT 2.0,您可以在其中读取文档 URI 和标记化以将其拆分以提取文件名。或者使用 XSLT 1.0 处理器,假设您使用知道文件名的 Java 代码运行转换以在其上运行转换,您可以考虑定义一个全局参数,您的 Java 代码在运行转换之前将其设置为文件名,并且XSLT 读出:

  <xsl:param name="file-id"/>

  <xsl:template match="/">
    <add>
      <doc> 
        <field name="ID"><xsl:value-of select="$file-id"/></field>       
        <xsl:apply-templates select="//TEXT/*"/>
      </doc>
    </add>
  </xsl:template>

请注意,您的其他模板相当冗长,可以缩短为

  <xsl:template match="*"> 
    <field name="{name()}">
      <xsl:value-of select="."/>
    </field>
  </xsl:template>

【讨论】:

  • 感谢您的回复:)。我对所有这些东西完全陌生,所以我需要更多地学习和理解一切。我会研究撒克逊人,因为我也有这个想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
相关资源
最近更新 更多