用XSLT实现Solr标准格式XML到XML的转换

jogvjijk  于 2022-11-05  发布在  Solr
关注(0)|答案(1)|浏览(216)

这是我的示例XML文件转换为不同的格式。我想转换SOLR标准格式上传xml文件。我尝试使用XSLT转换xml文件为solr格式。但它只为工作的第一部分。我必须转换为所有元素。我可以转换为我所需的输出。如果有任何相关的文章,请分享。

<?xml version="1.0"?>
<article>
<section xml:id="s495f">
    <title xml:id="h4cd0"> ID</title>
    <para xml:id="p75998"> User_name</para>
</section>
<section xml:id="s495f">
    <title xml:id="h4cd0"> ID</title>
    <para xml:id="p75998"> User_name</para>
    <para xml:id="pfa"> abbccddefg</para>
</section>
<section xml:id="s495f">
    <title xml:id="h4cd0"> ID</title>
    <para xml:id="p75998"> User_name</para>
    <para xml:id="pfa"> Test</para>
</section>
</article>

我尝试使用XSLT转换为Solr标准格式。以下是我的XSLT文件:

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

 <xsl:template match="/article">
<add>
<doc>
    <xsl:apply-templates select="section"/>
</doc>
</add>
  </xsl:template>

  <xsl:template match="para">
    <field name="para {@xml:id}">
     <xsl:value-of select="." />
    </field>
  </xsl:template>

  <xsl:template match="title">
    <field name="title {@xml:id}">
     <xsl:value-of select="." />
    </field>
   </xsl:template>

</xsl:stylesheet>

我输出如下:这只适用于单个“section”元素,我尝试为每个“section”元素进行转换

我的输出:

<?xml version="1.0" encoding="UTF-8"?>
<add>
 <add>
    <doc>
    <field name ="title h4cd0"> ID</field>
    <field name = "para p75998"> User_name</field>
    <field name = "para pfa"> xyxzzc</field>
    <field name = "para  p90f4b1"> location: details</field>
    <field name = "para p43cecf4"> Job profile</field>
    <field name = "para p75d4cc799"> refrence Id</field>
    <field name = "para p628c34"> True</field>
    </doc>
</add>

我期望的输出:

<add>
    <doc>
    <field name ="title h4cd0"> ID</field>
    <field name = "para p75998"> User_name</field>
    </doc>
    <doc>
    <field name ="title h4cd0"> ID</field>
    <field name = "para p75998"> User_name</field>
    <field name = "para pfa"> abbccddefg</field>
    </doc>
    <doc>
        <field name ="title h4cd0"> ID</field>
        <field name = "para p75998"> User_name</field>
        <field name = "para pfa"> Test</field>
    </doc>
</add>
c2e8gylq

c2e8gylq1#

您在模板中创建了与article匹配的Solr doc元素,但实际上您希望为每个section创建一个doc。您需要创建一个与section匹配的模板,并将doc元素移到其中(article模板应该只创建Solr add元素)。
Solr字段名称中不允许NB空格。请尝试使用下划线。

<xsl:stylesheet version="1.0" 
                  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/article">
    <add>
      <xsl:apply-templates select="section"/>
    </add>
  </xsl:template>

  <xsl:template match="section">
    <doc>
      <xsl:apply-templates/>
    </doc>
  </xsl:template>

  <xsl:template match="para">
    <field name="para_{@xml:id}">
     <xsl:value-of select="." />
    </field>
  </xsl:template>

  <xsl:template match="title">
    <field name="title_{@xml:id}">
     <xsl:value-of select="." />
    </field>
  </xsl:template>

</xsl:stylesheet>

相关问题