我是XSLT的新手并且在项目中得到了如下所述的要求。我有一个XML文件,如下所示。
<Results>
- <Result>
<Usuals>
<Products>
<Product>
<ProductId>1</ProductId>
<ProductName>Test1</ProductName>
<ProductLocation>TestPlace1</ProductLocation>
</Product>
<Product>
<ProductId>2</ProductId>
<ProductName>Test2</ProductName>
<ProductLocation>TestPlace2</ProductLocation>
</Product>
<Product>
<ProductId>3</ProductId>
<ProductName>Test3</ProductName>
<ProductLocation>TestPlace3</ProductLocation>
</Product>
</Products>
</Usuals>
</Result>
- <Result>
<Price>
<Products>
<Product>
<ProductId>1</ProductId>
<PriceValue>100</PriceValue>
</Product>
<Product>
<ProductId>2</ProductId>
<PriceValue>200</PriceValue>
</Product>
<Product>
<ProductId>3</ProductId>
<PriceValue>300</PriceValue>
</Product>
</Products>
</Price>
</Result>
<Result>
<Items>
<Products>
<Product>
<ProductId>1</ProductId>
<ItemValue>400</ItemValue>
</Product>
<Product>
<ProductId>2</ProductId>
<ItemValue>500</ItemValue>
</Product>
<Product>
<ProductId>3</ProductId>
<ItemValue>600</ItemValue>
</Product>
</Products>
</Items>
</Result>
</Results>
&#13;
foreach(Product product in Usuals.Products)
{
//display product.ProductId,
//display PriceValue for matching product.ProductId in Price.Products
//display ItemValue for matching product.ProductId in Items.Products
}
提前致谢,
答案 0 :(得分:0)
实现此目标的最简单方法是定义键。您只需使用一个涵盖所有Product
元素的键
<xsl:key name="productsById" match="Product" use="ProductId" />
现在给定ID x
,您可以使用XPath表达式获取包含具有该ID的所有Product
元素的节点集
key('productsById', x)
这将为您提供一组三个元素节点,Product
,Usuals
和Price
下的匹配Items
元素,因此价格可以作为< / p>
key('productsById', x)/PriceValue
和ItemValue
为
key('productsById', x)/ItemValue
(Product
函数返回的三个key
元素中只有一个具有这些子元素并不重要,路径表达式将正常工作。“