需要XLST读取filemaker的XML文件结果

需要XLST读取filemaker的XML文件结果,xml,parsing,xslt,import,filemaker,Xml,Parsing,Xslt,Import,Filemaker,我不是xml专家,我想从打印机上导入一个日志文件,我需要一个xlst文件 将其导入filemaker,但出现问题 我想要什么样的结果 低于_版本结果=3.05 在“自动放电合成”下,结果=1 “高度”下的结果=500.12077 在“Widht”下,结果=400.22566 在“scaleFixedRatio”下,结果=真 “高度”下的结果=56.20050 在“宽度”下,结果=56.10050 所以我只需要名字和结果 xlst文件现在的情况是,它只获取 _版本3.05 自动放电组件1 然

我不是xml专家,我想从打印机上导入一个日志文件,我需要一个xlst文件 将其导入filemaker,但出现问题

  • 我想要什么样的结果
  • 低于_版本结果=3.05
  • 在“自动放电合成”下,结果=1
  • “高度”下的结果=500.12077
  • 在“Widht”下,结果=400.22566
  • 在“scaleFixedRatio”下,结果=真
  • “高度”下的结果=56.20050
  • 在“宽度”下,结果=56.10050
所以我只需要名字和结果 xlst文件现在的情况是,它只获取

  • _版本3.05
  • 自动放电组件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> 

3.05
1.
500.12077
400.22566
符合事实的
56.20050
56.10050
这是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>

0
  • 任何帮助都将不胜感激 谢谢

WN

问题在于,对于“高度”和“宽度”属性,它们嵌套在void中的其他对象元素中

<void property="scaleRatio">
   <object class="cmn.math.DimDouble">
      <void property="height">

但是,您只需执行
即可获得值,该值将仅查找当前对象元素中的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>

0
应用于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>

0
3.05
1.
500.12077
400.22566
符合事实的
56.20050
56.10050