【问题标题】:Need XLST to read XML file results for filemaker需要 XLST 来为 filemaker 读取 XML 文件结果
【发布时间】:2012-11-16 16:15:13
【问题描述】:

不是 xml 专家我试图从打印机导入日志文件,我需要一个 xlst 文件 将其导入文件制作器,但出现问题

  • 我想要什么结果?
  • 在_Version Result=3.05下
  • 在“autoDischargeComposition”结果=1 下
  • 在“身高”下结果=500.12077
  • 在“宽度”下结果=400.22566
  • 在“scaleFixedRatio”下结果=True
  • 在“高度”下结果=56.20050
  • 在“宽度”下结果=56.10050

所以我只需要名称和结果 xlst 文件现在发生的事情是它只获取

  • _版本 3.05
  • autoDischargeComposition 1
  • 并跳过其余部分!!!!

这是打印机 log.xml 文件:

    <?xml version="1.0" encoding="UTF-8"?> 
    <java version="1.6.0_27" class="java.beans.XMLDecoder"> 
    <object class="rip.properties.XmlEdit"> 
    <void property="_VERSION"> 
    <string>3.05</string> 
    </void> 
    <void property="autoDischargeComposition"> 
    <int>1</int> 
    </void>  
    <void property="scale"> 
    <object class="cmn.math.DimDouble"> 
    <void property="height"> 
    <double>500.12077</double> 
    </void> 
    <void property="width"> 
    <double>400.22566</double> 
    </void> 
    </object> 
    </void> 
   <void property="scaleFixedRatio"> 
   <boolean>true</boolean> 
  </void> 
  <void property="scaleRatio"> 
  <object class="cmn.math.DimDouble"> 
  <void property="height"> 
  <double>56.20050</double> 
  </void> 
  <void property="width"> 
  <double>56.10050</double> 
  </void> 
 </object> 
 </void> 
 </object> 
</java> 

这是 xlst 文件

    <?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" version="1.0" encoding="utf-8" indent="yes"/>

    <xsl:template match="/">

    <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
    <ERRORCODE>0</ERRORCODE>
    <PRODUCT BUILD="" NAME="" VERSION=""/>
    <DATABASE DATEFORMAT="" LAYOUT="" NAME="" RECORDS="" TIMEFORMAT=""/>

    <METADATA>
    <FIELD NAME="_VERSION" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
    <FIELD NAME="autoDischargeComposition" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>

    <FIELD NAME="height" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
    <FIELD NAME="width" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>

    <FIELD NAME="scaleRatio" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
    <FIELD NAME="height" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
    <FIELD NAME="width" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>

    </METADATA>

    <RESULTSET FOUND="">

    <xsl:for-each select="java/object">
    <ROW MODID="" RECORDID="">
    <COL><DATA><xsl:value-of select="void[@property='_VERSION']/string"/></DATA></COL>
    <COL><DATA><xsl:value-of select="void[@property='autoDischargeComposition']/int"/></DATA></COL>

    <COL><DATA><xsl:value-of select="void[@property='height']/string"/></DATA></COL>
    <COL><DATA><xsl:value-of select="void[@property='width']/string"/></DATA></COL>

    <COL><DATA><xsl:value-of select="void[@property='scaleRatio']/string"/></DATA></COL>
    <COL><DATA><xsl:value-of select="void[@property='height']/string"/></DATA></COL>
    <COL><DATA><xsl:value-of select="void[@property='width']/string"/></DATA></COL> 

    </ROW>

    </xsl:for-each>

    </RESULTSET>
    </FMPXMLRESULT>

    </xsl:template>
    </xsl:stylesheet>
  • 任何帮助将不胜感激 谢谢

WN

【问题讨论】:

    标签: xml parsing xslt import filemaker


    【解决方案1】:

    问题在于,对于您的 'height' 和 'width' 属性,它们嵌套在 void

    内的其他 object 元素中
    <void property="scaleRatio">
       <object class="cmn.math.DimDouble">
          <void property="height">
    

    但是,您只需使用&lt;xsl:value-of select="void[@property='height']/string"/&gt; 来获取值,它只会在当前 object 元素中查找 void 元素。我认为您可能应该做这样的事情来应对双重嵌套的空白。

    <xsl:value-of 
       select="void[@property='scale']/object/void[@property='height']/double"/>
    

    您遇到的唯一其他问题是您正在为您的“scaleRatio”元素寻找一个字符串值。我认为您可能需要在这里使用“scaleFixedRatio”。

    试试下面的 XSLT

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
       <xsl:template match="/">
          <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
             <ERRORCODE>0</ERRORCODE>
             <PRODUCT BUILD="" NAME="" VERSION=""/>
             <DATABASE DATEFORMAT="" LAYOUT="" NAME="" RECORDS="" TIMEFORMAT=""/>
             <METADATA>
                <FIELD NAME="_VERSION" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
                <FIELD NAME="autoDischargeComposition" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
                <FIELD NAME="height" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
                <FIELD NAME="width" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
                <FIELD NAME="scaleRatio" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
                <FIELD NAME="height" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
                <FIELD NAME="width" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
             </METADATA>
             <RESULTSET FOUND="">
                <xsl:for-each select="java/object">
                   <ROW MODID="" RECORDID="">
                      <COL>
                         <DATA>
                            <xsl:value-of select="void[@property='_VERSION']/string"/>
                         </DATA>
                      </COL>
                      <COL>
                         <DATA>
                            <xsl:value-of select="void[@property='autoDischargeComposition']/int"/>
                         </DATA>
                      </COL>
                      <COL>
                         <DATA>
                            <xsl:value-of select="void[@property='scale']/object/void[@property='height']/double"/>
                         </DATA>
                      </COL>
                      <COL>
                         <DATA>
                            <xsl:value-of select="void[@property='scale']/object/void[@property='width']/double"/>
                         </DATA>
                      </COL>
                      <COL>
                         <DATA>
                            <xsl:value-of select="void[@property='scaleFixedRatio']/boolean"/>
                         </DATA>
                      </COL>
                      <COL>
                         <DATA>
                            <xsl:value-of select="void[@property='scaleRatio']/object/void[@property='height']/double"/>
                         </DATA>
                      </COL>
                      <COL>
                         <DATA>
                            <xsl:value-of select="void[@property='scaleRatio']/object/void[@property='width']/double"/>
                         </DATA>
                      </COL>
                   </ROW>
                </xsl:for-each>
             </RESULTSET>
          </FMPXMLRESULT>
       </xsl:template>
    </xsl:stylesheet>
    

    当应用于您的 XML 时,将输出以下内容

    <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
       <ERRORCODE>0</ERRORCODE>
       <PRODUCT BUILD="" NAME="" VERSION=""/>
       <DATABASE DATEFORMAT="" LAYOUT="" NAME="" RECORDS="" TIMEFORMAT=""/>
       <METADATA>
          <FIELD NAME="_VERSION" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
          <FIELD NAME="autoDischargeComposition" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
          <FIELD NAME="height" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
          <FIELD NAME="width" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
          <FIELD NAME="scaleRatio" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
          <FIELD NAME="height" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
          <FIELD NAME="width" TYPE="NUMBER" EMPTYOK="YES" MAXREPEAT=""/>
       </METADATA>
       <RESULTSET FOUND="">
          <ROW MODID="" RECORDID="">
             <COL>
                <DATA>3.05</DATA>
             </COL>
             <COL>
                <DATA>1</DATA>
             </COL>
             <COL>
                <DATA>500.12077</DATA>
             </COL>
             <COL>
                <DATA>400.22566</DATA>
             </COL>
             <COL>
                <DATA>true</DATA>
             </COL>
             <COL>
                <DATA>56.20050</DATA>
             </COL>
             <COL>
                <DATA>56.10050</DATA>
             </COL>
          </ROW>
       </RESULTSET>
    </FMPXMLRESULT>
    

    【讨论】:

      猜你喜欢
      • 2014-09-17
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 2022-10-16
      相关资源
      最近更新 更多