有没有人有一种使用xpath表达式查找或创建XObject的简洁方法。
我遇到的问题是我需要在元素上设置一个值(我有xpath),这可能存在也可能不存在。如果它不存在,我希望它被创建。
非常感谢任何提示或链接。
谢谢大家。
答案 0 :(得分:1)
您可以使用System.Xml.XPath.Extensions类来评估XDocument上的XPath表达式。
http://msdn.microsoft.com/en-us/library/system.xml.xpath.extensions.aspx
例如:
using System.Xml.XPath;
...
XDocument doc = XDocument.Load("sample.xml");
var matching = doc.XPathEvaluate("//Book[@Title='Great Expectations']");
// 'matching' could be an IEnumerable of XElements, depending on the query
答案 1 :(得分:0)
假设一条简单的路径,而您只想在其末尾添加一些数据。
从一些示例数据开始:
$items = DB::select(DB::raw('SELECT * FROM items WHERE items.id = '.$id.' ;'));
foreach($items as $item){
$product = DB::select(DB::raw(' select * from product
where product_id = '. $id.';' ));
$item->add_whatever_element_you_want = $product;
}
这不起作用,因为产品节点不存在:
$app->group('/utils', function () use ($app) {
$app->get('/date', function ($request, $response) {
return $response->getBody()->write(date('Y-m-d H:i:s'));
});
$app->get('/time', function ($request, $response) {
return $response->getBody()->write(time());
});
})->add(function ($request, $response, $next) {
$response->getBody()->write('It is now ');
$response = $next($request, $response);
$response->getBody()->write('. Enjoy!');
return $response;
});
为此,您可以定义自己的扩展方法:
var xml = XDocument.Parse(@"<?xml version=""1.0""?>
<messages>
<request type=""MSG"">
<header>
<datestamp>2019-02-26T14:49:41+00:00</datestamp>
<source>1</source>
</header>
<body>
<title>Hi there</title>
</body>
</request>
</messages>
");
并将这些链接在一起以创建新路径。
xml.XPathSelectElement("/messages/request/body/product")
?.Add(new XElement("description", "A new product"));