簡體   English   中英

XSL XML轉換添加不存在的領域?

[英]xsl to xml transformation adding non existing field?

我有數千個xsl文件,我需要轉換它們才能在Solr中建立索引。 我已經做到了,但是我需要每個文件都具有與文件名相同的字段ID。 這些文件如下所示:

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

例如:我的文件名類似“ 0001.xsl”,“ 0002.xsl” .. etc。 我需要有類似的東西:

<?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>

我到底該怎么做? 讀取文件名后,是否需要更改stylesheeet或可以使用Java添加特定字段? 我正在使用Java來轉換文件並為其編制索引。

當您使用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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM