所以要扩大......
我有一些XML
<root>
<list>
<item value="9"/>
<item value="3"/>
<item value="1"/>
<item value="8"/>
<item value="4"/>
</list>
</root>
Run Code Online (Sandbox Code Playgroud)
我有一个XPath"/ root/list/item [4]"我相信它将检索第5个'item'元素(其value属性为4)
这表明XPath"/ root/list/item [5]"将引用(当前不存在的)第6项.
我想要的是一个XPath表达式,它将引用'Next'(尚未存在)'item'元素,无论当前有多少项...
我假设这将传递一个表达式(它将计算当前元素的数量)而不是硬编码数字.
我知道我会怎么做,但根本找不到我应该怎么做......令人沮丧.
更新:澄清......我想返回"最后一个项目节点之后的项目节点".这些属性只是为了区分现有节点).我很欣赏这将返回一个空节点集.
更新:嗯,我有我的答案所以我想这是公平的我解释为什么我想要这个:)
基本上,某些.Net代码使用xPath作为写地址而不是读地址.
我将一个不存在的位置的xPath传递给EnsureNodeExists例程.(注意:我无法改变此EnsureNodeExists例程)代码将迭代xPath的每个元素,如果它不存在则创建它,然后将其设置为下一次迭代的父元素.
因此,我可以使用"/ root/list/item [position()= last()]/following-sibling :: item [1]"3次调用此代码,这将导致创建3个项目节点.
使用下面的xpath查询在属性上应用字符串函数(例如"normalize-space")的正确语法是什么?
查询:"./ @ media"
我在其他地方看过这个例子,但如果我用php的xpath库试一试,它什么都不返回......
有没有办法构建一个XPath查询,在某个位置找到一个节点并具有某个属性值?
请考虑以下示例xml:
<Item Type="Book">
<!--1st Param node in a Book item is always the autors last name-->
<Param Value="Updike" />
<!--2nd Param node in a Book item is always the autors first name-->
<Param Value="John" />
<!--3rd Param node in a Book item is always the book title-->
<Param Value="Toward the End of Time" /></Item>
Run Code Online (Sandbox Code Playgroud)
现在我可以构建一个查找以下内容的查询:
找到所有项目的节点类型,其中第2个"书" 帕拉姆节点都有一个值 "约翰"的.所以我想找到作者名字的所有书籍都是"约翰".
请注意,我使用的是.NET XPathDocument.
我有一个像这样的XML文档:
<wii>
<game>
<type genre="arcade" />
<type genre="sport" />
</game>
<game>
<type genre="platform" />
<type genre="arcade" />
</game>
</wii>
Run Code Online (Sandbox Code Playgroud)
如何仅使用XPath列出所有类型而不重复?
谢谢.
伙计们,
我必须与一个新团队合作并为每个团队设计所需的技能,我想为他们中的一个制定一个压缩的培训计划,成为团队中的Xml专家,作为其中的一部分,我让他阅读来自W3Schools的XPath,XSLT,但他还需要知道什么?还是有更好的来源?
我责怪谷歌搜索设备让我问这个问题.
以下是设备返回的XML片段:
<GSP VER="3.2">
<TM>0.073846</TM>
<Q>test</Q>
<PARAM name="entqr" value="0" original_value="0"/>
<PARAM name="access" value="p" original_value="p"/>
<PARAM name="output" value="xml_no_dtd" original_value="xml_no_dtd"/>
<PARAM name="sort" value="date:D:L:d1" original_value="date%3AD%3AL%3Ad1"/>
<PARAM name="ud" value="1" original_value="1"/>
<PARAM name="ie" value="UTF-8" original_value="UTF-8"/>
<PARAM name="btnG" value="Search" original_value="Search"/>
<PARAM name="client" value="default_frontend" original_value="default_frontend"/>
<PARAM name="oe" value="UTF-8" original_value="UTF-8"/>
<PARAM name="q" value="I like stuff" original_value="I like stuff"/>
...
Run Code Online (Sandbox Code Playgroud)
我需要为这些PARAM元素中的特定一个执行xsl:value-of,有条件地根据其名称.例如,我需要使用@ name ="client"输出PARAM元素的@value.
谢谢!
有一个汇率为http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml的XML文件:
<gesmes:Envelope>
<gesmes:subject>Reference rates</gesmes:subject>
<gesmes:Sender>
<gesmes:name>European Central Bank</gesmes:name>
</gesmes:Sender>
<Cube>
<Cube time="2009-11-26">
<Cube currency="USD" rate="1.5071"/>
...
Run Code Online (Sandbox Code Playgroud)
我做下一个XPath请求:
var doc = new XmlDocument();
doc.Load(url);
var node = doc.SelectSingleNode("//Cube[@currency=\"USD\""]);
var value = node.Attributes["rate"].Value;
Run Code Online (Sandbox Code Playgroud)
但它又回来了null!我的错误在哪里?
如果我这样做,一切正常:
var node = dic.SelectSingleNode("//*[@currency=\"USD\"]");
var name = node.Name; // "Cube"
Run Code Online (Sandbox Code Playgroud) 我有一个小的XML文件:
<wddxPacket version='1.0'>
<header/>
<data>
<struct type='coldfusion.runtime.ArgumentCollection'>
<var name='HEADLINE'>
<string>Richard Barret's Articles on Leadership and High Performance Organisations</string>
</var>
</struct>
</data>
</wddxPacket>
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用PHP SimpleXML和xpath来提取var名称HEADLINE元素中的字符串元素之间的值.此代码有效:
// Location of the XML file on the file system
$file = 'http://10.10.200.37/skins/importscript/41802.xml';
$xml = simplexml_load_file($file);
// CREATE THE ARRAYS FOR EACH XML ELEMENT NEEDED
$title = $xml->xpath('//var[@name="HEADLINE"]');
echo "<p>";
print_r($title);
echo "</p>";
Run Code Online (Sandbox Code Playgroud)
问题是它不仅返回值,还返回所有数组信息.如:
Array (
[0] => SimpleXMLElement Object (
[@attributes] => Array (
[name] => HEADLINE
)
[string] => Richard Barret's Articles on Leadership … 我是XSLT和XPath的新手,所以请原谅我这个简单的问题.
我有以下XML文件:
<?xml version="1.0"?>
<Configuration serviceName="Just Service" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
<Page name="Books">
<Instances count="5" />
<ConfigurationSettings>
<Setting name="index" value="true" />
<Setting name="number" value="value1" />
<Setting name="bookstorage" value="value2"/>
</ConfigurationSettings>
</Page>
<Page name="Magazines">
<Instances count="7" />
<ConfigurationSettings>
<Setting name="index" value="false" />
<Setting name="number" value="value1" />
<Setting name="magazinestorage" value="value3"/>
</ConfigurationSettings>
</Page>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
我只想更改以下值 ...
value1 - 数字(两个地方); value2 - 用于书籍存储 ; value3 - 杂志存储 ;
......并保持所有其他内容不变.
为此,我想使用msxsl.exe(Microsoft命令行实用程序).能否请您给我一个XSLT样式表示例的提示?如何以最有效的方式使用XSLT处理初始XML文件?
谢谢,Rac
是否有一种XPath方法使用XPath查询直接恢复XML节点的前一个兄弟节点的一个特定属性?
在下面的示例中,我想检索在标有该元素的元素之前的alt每个img节点的属性值.divid=marker
<content>
<img alt="1" src="file.gif" />
<img alt="2" src="file.gif" />
<img alt="3" src="file.gif" />
<img alt="4" src="file.gif" />
<div id='marker'></div>
</content>
Run Code Online (Sandbox Code Playgroud)
对于此示例,我想检索值1 2 3 4.
我使用以下XPath查询
//div[@id='marker']/preceding-sibling::img
Run Code Online (Sandbox Code Playgroud)
为了检索我想要的节点列表
<img alt="1" src="file.gif"/>
<img alt="2" src="file.gif"/>
<img alt="3" src="file.gif"/>
<img alt="4" src="file.gif"/>
Run Code Online (Sandbox Code Playgroud)
由于它是一个节点列表,我可以在节点上迭代以检索我正在寻找的属性值,但是有一种XPath方式吗?我原以为能够写下这样的东西:
//div[@id='marker']/preceding-sibling::img@alt
or //div[@id='marker']/preceding-sibling@alt::img
Run Code Online (Sandbox Code Playgroud)
但是,一旦你使用了XPath Axe类似的兄弟姐妹,我甚至不知道是否可能.