2012-01-23 61 views
2

我有一個問題,試圖建立一個XPath表達式選擇所有的「場」節點「名」 value屬性。XPath表達式選擇一個特定節點

我已經嘗試過://字段[@name],但它不返回任何結果。

我從XML文檔所需要的樣本結果是:的currentdate,trulyYours,索賠,dateOfLoss等等

謝謝您的幫助。

<?xml version="1.0" encoding="UTF-8"?> 
<?xfa generator="AdobeLiveCycleDesignerES_V9.0.0.2.20101008.1.734229" APIVersion="3.1.20001.0"?> 
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/" timeStamp="2012-01-23T17:23:59Z" uuid="594e6d9b-2319-4fdb-b490-4d7655e56aa0"> 
<template xmlns="http://www.xfa.org/schema/xfa-template/2.4/"> 
    <?formServer defaultPDFRenderFormat acrobat7.0.5static?> 
    <subform name="form1" locale="en_US" layout="tb"> 
     <pageSet> 
     <pageArea> 
      <contentArea name="ContentArea1" x="0pt" y="0pt" w="612pt" h="792pt"/> 
      <medium short="612pt" long="792pt" stock="custom"/> 
     </pageArea> 
     </pageSet> 
     <subform name="DynamicFragment"> 
     <bind match="none"/> 
     <field name="currentDate" y="0mm" x="0.86mm" w="62mm" h="0.229167in" access="readOnly"> 
      <ui> 
       <textEdit> 
        <border hand="right" presence="hidden"> 
        <?templateDesigner StyleID aped0?></border> 
        <margin/> 
       </textEdit> 
      </ui> 
      <font typeface="Myriad Pro"/> 
      <para vAlign="middle"/> 
      <?PDF_OBJR TextField1[3]?> 
      <bind match="global"/> 
     </field> 
     <field name="trulyYours" y="129.578mm" w="62mm" h="0.229167in" access="readOnly"> 
      <ui> 
       <textEdit> 
        <border hand="right" presence="hidden"> 
        <?templateDesigner StyleID aped0?></border> 
        <margin/> 
       </textEdit> 
      </ui> 
      <font typeface="Myriad Pro"/> 
      <para vAlign="middle"/> 
      <?PDF_FIELD_ID 30003?> 
      <?PDF_OBJR TextField1[3]?> 
      <bind match="global"/> 
     </field> 
     <field name="claimant" y="47.624mm" x="46.135mm" w="62mm" h="0.229167in" access="readOnly"> 
      <ui> 
       <textEdit> 
        <border hand="right" presence="hidden"> 
        <?templateDesigner StyleID aped0?></border> 
        <margin/> 
       </textEdit> 
      </ui> 
      <font typeface="Myriad Pro"/> 
      <para vAlign="middle"/> 
      <?PDF_FIELD_ID 30003?> 
      <?PDF_OBJR TextField1[3]?> 
      <bind match="global"/> 
     </field> 
     <field name="ourInsured" y="42.618mm" x="46.135mm" w="62mm" h="0.229167in" access="readOnly"> 
      <ui> 
       <textEdit> 
        <border hand="right" presence="hidden"> 
        <?templateDesigner StyleID aped0?></border> 
        <margin/> 
       </textEdit> 
      </ui> 
      <font typeface="Myriad Pro"/> 
      <para vAlign="middle"/> 
      <?PDF_FIELD_ID 30002?> 
      <?PDF_OBJR TextField1[2]?> 
      <bind match="global"/> 
     </field> 
     <field name="dateOfLoss" y="37.127mm" x="46.135mm" w="62mm" h="0.229167in" access="readOnly"> 
      <ui> 
       <textEdit> 
        <border hand="right" presence="hidden"> 
        <?templateDesigner StyleID aped0?></border> 
        <margin/> 
       </textEdit> 
      </ui> 
      <font typeface="Myriad Pro"/> 
      <para vAlign="middle"/> 
      <?PDF_FIELD_ID 30001?> 
      <?PDF_OBJR TextField1[1]?> 
      <bind match="global"/> 
     </field> 
     <field name="ourClaimNumber" y="32.132mm" x="46.153mm" w="62mm" h="0.229167in" access="readOnly"> 
      <ui> 
       <textEdit> 
        <border hand="right" presence="hidden"> 
        <?templateDesigner StyleID aped0?></border> 
        <margin/> 
       </textEdit> 
      </ui> 
      <font typeface="Myriad Pro"/> 
      <para vAlign="middle"/> 
      <?PDF_FIELD_ID 30001?> 
      <?PDF_OBJR TextField1[0]?> 
      <bind match="global"/> 
     </field> 
     <traversal> 
      <traverse operation="first" ref="currentDate[0]"/> 
     </traversal> 
     <?templateDesigner isFragment yes?> 
     <?templateDesigner fragmentTitle 3016DynamicFragment?></subform> 
    </subform> 
    <?templateDesigner FormTargetVersion 24?> 
    <?templateDesigner Zoom 89?> 
    <?templateDesigner Rulers horizontal:1, vertical:1, guidelines:1, crosshairs:0?></template> 
<config xmlns="http://www.xfa.org/schema/xci/1.0/"> 
    <agent name="designer"> 
     <!-- [0..n] --> 
     <destination>pdf</destination> 
     <pdf> 
     <!-- [0..n] --> 
     <fontInfo/> 
     </pdf> 
    </agent> 
    <present> 
     <!-- [0..n] --> 
     <destination>pdf</destination> 
     <pdf> 
     <!-- [0..n] --> 
     <fontInfo/> 
     <version>1.65</version> 
     </pdf> 
     <xdp> 
     <packets>*</packets> 
     </xdp> 
    </present> 
</config> 
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.1-c043 52.437709, 2010/08/04-17:30:07  "> 
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 
     <rdf:Description xmlns:xmp="http://ns.adobe.com/xap/1.0/" rdf:about=""> 
     <xmp:MetadataDate>2012-01-23T17:23:59Z</xmp:MetadataDate> 
     <xmp:CreatorTool>Adobe LiveCycle Designer ES 9.0</xmp:CreatorTool> 
     </rdf:Description> 
     <rdf:Description xmlns:pdf="http://ns.adobe.com/pdf/1.3/" rdf:about=""> 
     <pdf:Producer>Adobe LiveCycle Designer ES 9.0</pdf:Producer> 
     </rdf:Description> 
     <rdf:Description xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" rdf:about=""> 
     <xmpMM:DocumentID>uuid:594e6d9b-2319-4fdb-b490-4d7655e56aa0</xmpMM:DocumentID> 
     </rdf:Description> 
     <rdf:Description xmlns:lcd="http://ns.adobe.com/livecycle/designer/" xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about=""> 
     <lcd:fragmentCatalog> 
      <rdf:Seq> 
       <rdf:li rdf:parseType="Resource"> 
        <dc:title> 
        <rdf:Alt> 
         <rdf:li xml:lang="x-default">3016DynamicFragment</rdf:li> 
        </rdf:Alt> 
        </dc:title> 
        <dc:description> 
        <rdf:Alt> 
         <rdf:li xml:lang="x-default"/> 
        </rdf:Alt> 
        </dc:description> 
        <dc:identifier>$template.form1.DynamicFragment</dc:identifier> 
        <lcd:fragmentRole>Subform</lcd:fragmentRole> 
       </rdf:li> 
      </rdf:Seq> 
     </lcd:fragmentCatalog> 
     </rdf:Description> 
    </rdf:RDF> 
</x:xmpmeta> 
<localeSet xmlns="http://www.xfa.org/schema/xfa-locale-set/2.1/"> 
    <locale name="en_US" desc="English (United States)"> 
     <calendarSymbols name="gregorian"> 
     <monthNames> 
      <month>January</month> 
      <month>February</month> 
      <month>March</month> 
      <month>April</month> 
      <month>May</month> 
      <month>June</month> 
      <month>July</month> 
      <month>August</month> 
      <month>September</month> 
      <month>October</month> 
      <month>November</month> 
      <month>December</month> 
     </monthNames> 
     <monthNames abbr="1"> 
      <month>Jan</month> 
      <month>Feb</month> 
      <month>Mar</month> 
      <month>Apr</month> 
      <month>May</month> 
      <month>Jun</month> 
      <month>Jul</month> 
      <month>Aug</month> 
      <month>Sep</month> 
      <month>Oct</month> 
      <month>Nov</month> 
      <month>Dec</month> 
     </monthNames> 
     <dayNames> 
      <day>Sunday</day> 
      <day>Monday</day> 
      <day>Tuesday</day> 
      <day>Wednesday</day> 
      <day>Thursday</day> 
      <day>Friday</day> 
      <day>Saturday</day> 
     </dayNames> 
     <dayNames abbr="1"> 
      <day>Sun</day> 
      <day>Mon</day> 
      <day>Tue</day> 
      <day>Wed</day> 
      <day>Thu</day> 
      <day>Fri</day> 
      <day>Sat</day> 
     </dayNames> 
     <meridiemNames> 
      <meridiem>AM</meridiem> 
      <meridiem>PM</meridiem> 
     </meridiemNames> 
     <eraNames> 
      <era>BC</era> 
      <era>AD</era> 
     </eraNames> 
     </calendarSymbols> 
     <datePatterns> 
     <datePattern name="full">EEEE, MMMM D, YYYY</datePattern> 
     <datePattern name="long">MMMM D, YYYY</datePattern> 
     <datePattern name="med">MMM D, YYYY</datePattern> 
     <datePattern name="short">M/D/YY</datePattern> 
     </datePatterns> 
     <timePatterns> 
     <timePattern name="full">h:MM:SS A Z</timePattern> 
     <timePattern name="long">h:MM:SS A Z</timePattern> 
     <timePattern name="med">h:MM:SS A</timePattern> 
     <timePattern name="short">h:MM A</timePattern> 
     </timePatterns> 
     <dateTimeSymbols>GyMdkHmsSEDFwWahKzZ</dateTimeSymbols> 
     <numberPatterns> 
     <numberPattern name="numeric">z,zz9.zzz</numberPattern> 
     <numberPattern name="currency">$z,zz9.99|($z,zz9.99)</numberPattern> 
     <numberPattern name="percent">z,zz9%</numberPattern> 
     </numberPatterns> 
     <numberSymbols> 
     <numberSymbol name="decimal">.</numberSymbol> 
     <numberSymbol name="grouping">,</numberSymbol> 
     <numberSymbol name="percent">%</numberSymbol> 
     <numberSymbol name="minus">-</numberSymbol> 
     <numberSymbol name="zero">0</numberSymbol> 
     </numberSymbols> 
     <currencySymbols> 
     <currencySymbol name="symbol">$</currencySymbol> 
     <currencySymbol name="isoname">USD</currencySymbol> 
     <currencySymbol name="decimal">.</currencySymbol> 
     </currencySymbols> 
     <typefaces> 
     <typeface name="Myriad Pro"/> 
     <typeface name="Minion Pro"/> 
     <typeface name="Courier Std"/> 
     <typeface name="Adobe Pi Std"/> 
     <typeface name="Adobe Hebrew"/> 
     <typeface name="Adobe Arabic"/> 
     <typeface name="Adobe Thai"/> 
     <typeface name="Kozuka Gothic Pro-VI M"/> 
     <typeface name="Kozuka Mincho Pro-VI R"/> 
     <typeface name="Adobe Ming Std L"/> 
     <typeface name="Adobe Song Std L"/> 
     <typeface name="Adobe Myungjo Std M"/> 
     </typefaces> 
    </locale> 
</localeSet></xdp:xdp> 

回答

3

還有你的表達 - //field[@name] - 選擇具有一個name屬性的所有field元素。你需要做的是選擇屬性本身。就像這樣:

//field/@name 

關於命名空間:你的目標節點都在http://www.xfa.org/schema/xfa-template/2.4/命名空間中找到。任何XPath表達式都必須考慮到以下步驟:

  1. 使用XPath引擎將命名空間註冊爲前綴。這是如何完成的取決於您用於評估表達式的主機語言。例如,在Java中,這是通過創建javax.xml.namespace.NamespaceContext來完成的,該javax.xml.namespace.NamespaceContext已通過javax.xml.xpath.XPath實例註冊。

  2. 使用您在步驟1)查詢目標命名空間的元素註冊的前綴。因此,舉例來說,如果你的前綴xfa註冊http://www.xfa.org/schema/xfa-template/2.4/,那麼你會寫這樣的表達:

    //xfa:field/@name 
    

命名空間無關的解決方案:可能(但不一定推薦)選擇目標節點而不考慮命名空間,使用以下表達式:

//*[local-name()='field']/@name 
+0

我嘗試過了,也沒有帶來比賽... – user1165912

+0

順便說一句,感謝您的快速響應;) – user1165912

+0

@ user1165912 - 這是因爲您的節點處於默認名稱空間。看我的編輯。 –

2

您需要爲命名空間。 field元素不在空名稱空間中。它似乎在http://www.xfa.org/schema/xfa-template/2.4/

你如何分配空間前綴取決於您使用發出什麼樣的XPath宿主語言。你不說,所以我們不能幫你。它可能看起來像這樣的化妝的例子:

xpather.registerNamespace('xfa', 'http://www.xfa.org/schema/xfa-template/2.4/'); 

請注意,「xfa」可以是你想要的任何前綴。只有命名空間uri很重要。

一旦做到這一點,你的XPath看起來就像這樣:

//xfa:field/@name 

如果您分配的前綴XPD命名空間太大,你可以更具體:

/xpd:xpd/xfa:template//xfa:field/@name 
相關問題