【问题标题】:XML to XML converstion of Solr Stander Format using XSLT使用 XSLT 将太阳能标准格式的 XML 转换为 XML
【发布时间】:2022-11-03 16:45:42
【问题描述】:

这是我用于转换为不同格式的示例 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 Standered 格式。这是我的 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>

我的输出是这样的:仅适用于单个“节”元素,我尝试为每个“节”元素进行转换

我的输出:

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

【问题讨论】:

    标签: xml xslt solr solrj solrcloud


    【解决方案1】:

    您正在模板中创建与 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>
    

    【讨论】:

    • 我可以在 solrconfig 中使用这个 xslt 文件吗?
    • 使用UpdateRequestHandler?是的,我会这么认为。 solr.apache.org/guide/6_6/…
    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 2017-12-25
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多