Reputation: 23
I'm having an issue trying to build an Xpath expression to select all the "field" nodes "name" value attribute.
I already tried: //field[@name] but it returns no matches.
The sample results I need from the XML document are: currentDate, trulyYours, claimant, dateOfLoss etc...
Thank you for your help.
<?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>
Upvotes: 2
Views: 3839
Reputation: 31621
You need to assign a prefix for the namespace. The field
element is not in a null namespace. It appears to be in http://www.xfa.org/schema/xfa-template/2.4/
.
How you assign the namespace prefix depends on what host language you are using to issue the XPath. You don't say so we can't help you. It will probably look something like this made-up example:
xpather.registerNamespace('xfa', 'http://www.xfa.org/schema/xfa-template/2.4/');
Note that "xfa" can be any prefix you want. Only the namespace uri matters.
Once that is done, your XPath will look like this:
//xfa:field/@name
If you assign a prefix to the xpd namespace too, you can be more specific:
/xpd:xpd/xfa:template//xfa:field/@name
Upvotes: 2
Reputation: 60414
The expression you've shown -- //field[@name]
-- selects all field
elements that have a name
attribute. What you need to do is select the attribute itself. Like this:
//field/@name
Regarding namespaces: Your target nodes are found in the http://www.xfa.org/schema/xfa-template/2.4/
namespace. Any XPath expression must take this into account with the following steps:
Register the namespace to a prefix with your XPath engine. How this is done depends on the host language you're using to evaluate the expression. In Java, for example, this is done by creating a javax.xml.namespace.NamespaceContext
that gets registered with the javax.xml.xpath.XPath
instance.
Use the prefix you registered in step 1) to query elements in the target namespace. So, for example, if you were to register http://www.xfa.org/schema/xfa-template/2.4/
with the prefix xfa
, then you'd write the expression like this:
//xfa:field/@name
Namespace-agnostic solution: It is possible (but not necessarily recommended) to select the target nodes without accounting for namespaces with the following expression:
//*[local-name()='field']/@name
Upvotes: 3