代码之家  ›  专栏  ›  技术社区  ›  Jordi

模板和xml

  •  0
  • Jordi  · 技术社区  · 5 年前

    我的意思是,有些属性有很长的字符串值:

    <dataConfig>
        <dataSource 
            driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
            url="jdbc:sqlserver://${dataimporter.request.host};databaseName=giac_txt"
            user="${dataimporter.request.user}"
            password="${dataimporter.request.password}"
        />
        
        <document>
            <entity name="item" query="select 'geac_txt' as source, codi_arxiu, codi_fons, codi_doc as codi_unitat, titol from anc_documents union all select 'geac_txt' as source, codi_arxiu, codi_fons, codi_unitat as codi_unitat, titol from anc_unicat">
                <field column="source" name="source_s"/>
                <field column="codi_arxiu" name="arxiu_l"/>
                <field column="codi_fons" name="fons_l"/>
                <field column="codi_unitat" name="codi_l"/>
                <field column="titol" name="titol_txt_ca" />
            </entity>
        </document>
    </dataConfig>
    

    我在想办法:

    1. 任何xml应用程序转换。

    我还不太会选对工具。

    我想用文字值分隔文件,然后将它们合并到主文档中。

    我的意思是,有些模板引擎是适用于任何语言的库,比如python、java。。。

    我正在寻找任何工具,没有使用任何代码,只有模板。。。

    有什么想法吗?

    0 回复  |  直到 5 年前
        1
  •  0
  •   kjhughes    5 年前

    您或您的团队已经知道的任何编程语言都将具有XML解析库,使您能够构建对模板的支持。在你的问题中没有足够的细节来提供更多的指导,除了一般性地建议你使用你所知道的并确保使用现有的XML解析库手工解析或者使用XML正则表达式绝对应该避免。

    另一种方法是XSLT,您至少应该知道这一点。

    XSLT是在XML文档(包括模板,实际上是XML)之间转换值的终极语言 是一个核心结构。XSLT的语义在从声明式、函数式和基于规则的范例中提取时是非传统的;它的语法是非常基于XML的。(虽然最初令人望而生畏,但一旦克服了学习曲线,这些特性实际上是强大的优势。)一旦掌握了这些特性,它的能力和适用性就从简单的脚本扩展到了本质上完全不同的数据格式和标准之间的复杂转换。

        2
  •  0
  •   Michael Kay    5 年前

    https://xsltfiddle.liberty-development.net/bEJbVr3

    这是最新版本xslt3.0。请注意,因为有许多XSLT处理器只实现了版本1.0,而版本1.0的功能要少得多。

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        exclude-result-prefixes="#all"
        expand-text="true"
        version="3.0">
    
      <xsl:mode on-no-match="shallow-copy"/>
      
      <xsl:output indent="yes"/>
    
      <xsl:template match="entity/@query">
          <xsl:for-each select="tokenize(., ',\s+')">
              <queryPart>{.}</queryPart>
          </xsl:for-each>
      </xsl:template>
      
    </xsl:stylesheet>
    

    工作原理:

    • 这个 <xsl:mode> 声明中说“默认情况下,通过浅层复制来处理每个元素和属性,除非找到更具体的规则”

    • 这个 <xsl:template> query 其包含元素名为 entity ,在逗号分隔符上拆分值,并为每个标记输出 queryPart 包含该标记的元素。“