Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt Position函数返回值无法索引集合中的特定节点_Xslt_Xslt 1.0 - Fatal编程技术网

Xslt Position函数返回值无法索引集合中的特定节点

Xslt Position函数返回值无法索引集合中的特定节点,xslt,xslt-1.0,Xslt,Xslt 1.0,我有以下XSLT,可以很好地工作: <xsl:template match="/*"> <root> <xsl:variable name="AddressNames" select="myUtil:getSecondXMLData()"/> <xsl:for-each select="item"> <AddressName> <xsl:variable na

我有以下XSLT,可以很好地工作:

  <xsl:template match="/*">
    <root>
      <xsl:variable name="AddressNames" select="myUtil:getSecondXMLData()"/>
      <xsl:for-each select="item">
        <AddressName>
          <xsl:variable name="curValue" select="position()"/>
          <xsl:value-of select="$AddressNames//Item[$curValue]/names"/>
        </AddressName>
      </xsl:for-each>
    </root>
  </xsl:template>

我的问题是,当不使用变量来包含当前位置,然后使用它来索引“//Item”集合中的特定项时,我只尝试以下方法

<xsl:value-of select="$AddressNames//Item[position()]/names"/>

我没有得到想要的输出。。。 期望输出:

<root>
    <AddressName>rahul sharma</AddressName>
    <AddressName>rahul sharma</AddressName>
    <AddressName>rahul sharma1</AddressName>
</root>

拉胡尔·夏尔马
拉胡尔·夏尔马
拉胡尔·夏尔马1
接收到错误的输出:

<root xmlns:myUtil="pda:MyUtils">
    <AddressName>rahul sharma</AddressName>
    <AddressName>rahul sharma</AddressName>
    <AddressName>rahul sharma</AddressName>
</root>

拉胡尔·夏尔马
拉胡尔·夏尔马
拉胡尔·夏尔马
输入为:

<?xml version="1.0" encoding="iso-8859-1"?>
<address>
  <item p2:type="ns1:sboeconnectCustomerAddressEntityItem" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance">
    <customer_address_id p2:type="xsd:string">19221</customer_address_id>
    <created_at p2:type="xsd:string">2015-01-21 13:11:13</created_at>
    <updated_at p2:type="xsd:string">2015-01-21 13:11:13</updated_at>
    <city p2:type="xsd:string">los angeles</city>
    <company p2:type="xsd:string">insync</company>
    <country_id p2:type="xsd:string">US</country_id>
    <firstname p2:type="xsd:string">rahul</firstname>
    <lastname p2:type="xsd:string">sharma</lastname>
    <postcode p2:type="xsd:string">90066</postcode>
    <region p2:type="xsd:string">Alabama@AL</region>
    <street p4:arrayType="xsd:string[1]" p2:type="ns1:ArrayOfString" xmlns:p4="http://schemas.xmlsoap.org/soap/encoding/">
      <item p2:type="xsd:string">eeee</item>
    </street>
    <telephone p2:type="xsd:string">8065534367</telephone>
    <is_default_billing p2:type="xsd:boolean">true</is_default_billing>
    <is_default_shipping p2:type="xsd:boolean">true</is_default_shipping>
  </item>
  <item>
    <customer_address_id>19221</customer_address_id>
    <city>los angeles</city>
    <country_id>US</country_id>
    <region>Alabama@AL</region>
    <firstname>rahul</firstname>
    <lastname>sharma</lastname>
    <postcode>90066</postcode>
    <street>
      <item p4:type="xsd:string" xmlns:p4="http://www.w3.org/2001/XMLSchema-instance">eeee</item>
    </street>
    <telephone>8065534367</telephone>
    <is_default_billing>false</is_default_billing>
    <is_default_shipping>true</is_default_shipping>
  </item>
  <item p2:type="ns1:sboeconnectCustomerAddressEntityItem" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance">
    <customer_address_id p2:type="xsd:string">19222</customer_address_id>
    <created_at p2:type="xsd:string">2015-01-21 13:11:13</created_at>
    <updated_at p2:type="xsd:string">2015-01-21 13:11:13</updated_at>
    <city p2:type="xsd:string">los angeles</city>
    <company p2:type="xsd:string">insync</company>
    <country_id p2:type="xsd:string">US</country_id>
    <firstname p2:type="xsd:string">rahul</firstname>
    <lastname p2:type="xsd:string">sharma</lastname>
    <postcode p2:type="xsd:string">90066</postcode>
    <region p2:type="xsd:string">Alabama@AL</region>
    <street p4:arrayType="xsd:string[1]" p2:type="ns1:ArrayOfString" xmlns:p4="http://schemas.xmlsoap.org/soap/encoding/">
      <item p2:type="xsd:string">CB-28</item>
    </street>
    <telephone p2:type="xsd:string">8065534367</telephone>
    <is_default_billing p2:type="xsd:boolean">false</is_default_billing>
    <is_default_shipping p2:type="xsd:boolean">false</is_default_shipping>
  </item>
</address>

19221
2015-01-21 13:11:13
2015-01-21 13:11:13
洛杉矶
同步
美国
拉胡尔
沙玛
90066
Alabama@AL
eeee
8065534367
真的
真的
19221
洛杉矶
美国
Alabama@AL
拉胡尔
沙玛
90066
eeee
8065534367
假的
真的
19222
2015-01-21 13:11:13
2015-01-21 13:11:13
洛杉矶
同步
美国
拉胡尔
沙玛
90066
Alabama@AL
CB-28
8065534367
假的
假的
变量(AddressNames)包含以下信息:

<?xml version="1.0" encoding="UTF-8"?>
<AddressNameCollection>
  <Item>
    <names>rahul sharma</names>
  </Item>
  <Item>
    <names>rahul sharma</names>
  </Item>
  <Item>
    <names>rahul sharma1</names>
  </Item>
</AddressNameCollection>

拉胡尔·夏尔马
拉胡尔·夏尔马
拉胡尔·夏尔马1

不确定你到底在问什么。在XPath中,谓词过滤位置步骤选择的节点集。表达式中的谓词
[2]

/root/item[2]
/root/item[position()]
过滤项目。这相当于:

/root/item[position() = 2]
其中,
position()
作为项目在由
root/item
选择的项目节点集中的位置进行计算。表达方式:

/root/item[2]
/root/item[position()]
评估结果如下:

/root/item[position() = position()]
这当然会为任何项返回true,因此这里的谓词没有做任何事情

您试图做的是:

/root/item[position() = current()/position()]

我认为它在XSLT2.0中工作,但在XSLT1.0中不工作。在XSLT 1.0中,必须将上下文项的位置存储在一个变量中,并在谓词中使用该变量(正如您在开始的示例中所做的那样)。

您还可以发布当前获得的错误结果吗?您不能将代码最小化到仅演示问题所需的程度吗?不,
current()/position()
不起作用。通常
$X/position()
返回序列1、2、3、4。。。N其中N是$X中的项数。由于
current()
是长度为1的序列,
current()/position()
返回1。您需要将
position()
的值绑定到一个变量,然后使用该变量,就像在原始文章中一样。