1

xml の専門家ではありません。プリンターからログファイルをインポートしようとしています。それを filemaker にインポートするには xlst ファイルが必要ですが、何か問題があります。

  • 私が望む結果は何ですか?
  • _Version Result=3.05 の下
  • 「autoDischargeComposition」の下 Result=1
  • 「高さ」の下 Result=500.12077
  • 「幅」の下で結果= 400.22566
  • "scaleFixedRatio" Result=True の下
  • 「身長」下 結果=56.20050
  • 「幅」の下 Result=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>
  • どんな助けでも感謝しますありがとう

西

4

1 に答える 1

0

問題は、「高さ」および「幅」プロパティの場合、これらがボイド内の他のオブジェクト要素内にネストされていることです

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

ただし、<xsl:value-of select="void[@property='height']/string"/>値を取得するためだけに行っているため、現在のオブジェクト要素内の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>
于 2012-11-16T16:42:21.907 に答える