我正在尝试从我的xml中选择一个具有特定属性"id"的元素.这是我的xml:
<listitems>
<item id="1">
<name>item 1</name>
</item>
<item id="2">
<name>item 2</name>
</item>
<item id="3">
<name>item 3</name>
</item>
</listitems>
Run Code Online (Sandbox Code Playgroud)
这个php文件:
<?php
$simplexml = simplexml_file_load('test.xml');
$item = $simplexml->xpath('item[@id="1"]');
?>
Run Code Online (Sandbox Code Playgroud)
然后,如果我尝试,例如:
<?php $item->addchild('description','textdescription'); ?>
Run Code Online (Sandbox Code Playgroud)
我在最后一行得到这个错误:"致命错误:在非对象上调用成员函数addchild()"
有什么不对的吗?
我在html文档中有以下文本:
<a href="#">?'?? ????????? ??????????</a>
Run Code Online (Sandbox Code Playgroud)
我正在使用以下表达式来提取文本:
row.xpath("string(./td[@class='col2 td-tags']/h3/a/text())")
Run Code Online (Sandbox Code Playgroud)
此表达式适用于简单的英语,但对于上面的字符串,它会抛出此错误:
'utf8' codec can't decode byte 0xd0 in position 0: invalid continuation byte
Run Code Online (Sandbox Code Playgroud) 这是XML文档.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
xmlns:v="urn:schemas-microsoft-com:vml">
<w:body>
<w:p>para1</w:p>
<w:tbl>table data 1</w:tbl>
<w:p>para2</w:p> <!-- have to check whether this node is w:tbl or not with respect to the context node below-->
<w:tbl>table data 2</w:tbl> <!-- Assume this is context node -->
</w:body>
</w:document>
Run Code Online (Sandbox Code Playgroud)
所以,我想要查询的第一前同辈[ <w:p>para2</w:p>]所述的上下文节点[ <w:tbl>table data 2</w:tbl>]是<w:tbl>或没有.
请指导我摆脱这个问题......
我有下一个xpath:
//span[text()="Bingo"]/parent::div/parent::div/parent::td/preceding-sibling::td[1]
Run Code Online (Sandbox Code Playgroud)
它返回两个元素.
我如何选择其中一个(第一个或第二个)?
我尝试:
//span[text()="Bingo"]/parent::div/parent::div/parent::td/preceding-sibling::td[1][1]
Run Code Online (Sandbox Code Playgroud)
但它仍然给了我两个元素.
我有一个看起来像这样的xpath:
$path = '//*[@id="page-content"]/table/tbody/tr[3]/td['.$i.']/div/a';
Run Code Online (Sandbox Code Playgroud)
其中,$i从1到X.我会正常使用:
for($i=1; $i<X;$i++){
$path = '//*[@id="page-content"]/table/tbody/tr[3]/td['.$i.']/div/a';
$nodelist = $xpath->query($path);
$result = $nodelist->item(0)->nodeValue;
};
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,我不知道X有多少.有没有办法在不知道X的情况下循环这个?
page = urlopen(req)
doc = parse(page).getroot()
table = doc.xpath('/html/body/div/div/div/table')
table
<Element table ...>
doc.xpath('/html/body/div/div/div/table/tr')
<Element tr ...>...
table.xpath('/tr')
[]
Run Code Online (Sandbox Code Playgroud)
为什么不table.xpath('/tr')产生相同的元素列表doc.xpath('/html/body/div/div/div/table/tr')呢?
如何在Oracle XMLTable()中使用带有类似'/ abc/[contract = $ count]/initialValue'的变量的XPath?
例如:
XMLTable('root/level1', PASSING xmlContent
COLUMNS initial_value varchar2(100) PATH '/abc/[contract = $count]/initialValue'
)
Run Code Online (Sandbox Code Playgroud)
如何替换/评估$ count运行时?
假设我有一堆
<item price='n' sold='m'>
...
</item>
Run Code Online (Sandbox Code Playgroud)
我想在每件商品上做价格*.我在尝试
'//item/(@price * @sold)'
Run Code Online (Sandbox Code Playgroud)
来自python中的lxml内部,但我不断收到错误'Invalid Expression'.xmllint命令也是如此.但是相同的查询在Oxygen xml编辑器中有效.
我该如何工作?
我正在写一个xpath,我编写了xpath,它匹配文档树中的一些节点
但是我想要匹配所有其他元素,所以我想在整个文档的上下文中反转选择
所以我们假设我们有以下xpath
//*[@id='menu']//*
Run Code Online (Sandbox Code Playgroud)
和文件
<body>
<div>
<h1>title</h1>
</div>
<div>
<div id="menu">
<UL>
<LI>home</LI>
<LI>about</LI>
</UL>
</div>
<div id="sidebar">
<ul>
<li>one</li>
<li>two</li>
</ul>
</div>
<div>
</body>
Run Code Online (Sandbox Code Playgroud)
所以上层节点是匹配的,但我想要实现的是标记所有小写节点.
谢谢你的帮助
我们有C#代码来处理我们创建的各种XML文档.通常我们需要获得一个已知的子元素(它可能是唯一的孩子或可能有其他兄弟姐妹).我有一个给父母的函数,子名称将返回子元素:
public static XmlElement GetChildElement(XmlElement parentElement, string childName)
{
return parentElement.GetElementsByTagName(childName).Cast<XmlElement>().FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但有一天我想知道是否可以使用XPath或LINQ to XML更清晰,更容易.我发现的大多数XPath示例似乎都想知道文档的整个结构,我想要一个只知道父和子的泛型函数.Linq to XML似乎更有前途,但我没有找到一个匹配我正在寻找的例子.
xpath ×10
xml ×4
php ×2
python ×2
xslt ×2
c# ×1
elementtree ×1
html-parsing ×1
linq-to-xml ×1
lxml ×1
oracle ×1
plsql ×1
simplexml ×1
xpath-2.0 ×1
xslt-2.0 ×1