我正在尝试构建一个复杂的xpath表达式,它将回答以下条件.
从下面的XML数据中,返回User实体,其中:
他有2个不同的配置文件值,分别是" operator "和" admin "(我不知道前面的确切顺序)
<user>
<login>user1</login>
<name>User 1</name>
<profile>
<value>admin</value>
<id>2</id>
<description>admin users</description>
</profile>
<profile>
<value>operator</value>
<id>1</id>
<description>Operator</description>
</profile>
</user>
<user>
<login>user2</login>
<name>User 2</name>
<profile>
<value>admin</value>
<id>4</id>
<description>admins users</description>
</profile>
<profile>
<value>poweruser</value>
<id>5</id>
<description>power users</description>
</profile>
</user>
</root>
Run Code Online (Sandbox Code Playgroud)有人可以为这种情况提供一个例子吗?
编辑:添加了复杂的配置文件实体
只想知道如何从XSLT中的子节点读取父节点的属性.码:
<A>
<b attr1="xx">
<c>
</c>
</b>
</A>
Run Code Online (Sandbox Code Playgroud)
XSLT:
<xsl:template match="c">
<xsl:value-of select="attribute of b node">
</xsl:template>
Run Code Online (Sandbox Code Playgroud) 我希望xml文档的所有节点都不是节点X的后代.
(我的实际问题有点复杂,但我现在仍然坚持"不是后代"部分).
我有这个XML文件,我想从中计算它中引用的用户数.但它们可以出现在多个类别中,我希望这些重复项不被考虑在内.
在下面的示例中,查询应该返回3而不是4.在XPath中是否有办法这样做?用户根本没有排序.
<list>
<group name='QA'>
<user name='name1'>name1@email</user>
<user name='name2'>name2@email</user>
</group>
<group name='DEV'>
<user name='name3'>name3@email</user>
<user name='name2'>name2@email</user>
</group>
</list>
Run Code Online (Sandbox Code Playgroud) 简短的问题:我想选择与属性不匹配的所有节点(@type!='x'),但属性也不存在(??).目前,我什么也没收到,因为其他节点根本没有属性.
背景:我有一些XML.请注意,其中一个具有type ="feature",但所有其他都没有'type'attr.
<image type="feature"><description>X</description><url>media/designer_glass_tile_04.jpg</url><height></height><width/></image>
<image><description>Designer Glass 05</description><url>media/designer_glass_tile_05.jpg</url><height></height><width/></image>
<image><description>Designer Glass 06</description><url>media/designer_glass_tile_06.jpg</url><height></height><width/></image>
<image><description>Designer Glass 07</description><url>media/designer_glass_tile_07.jpg</url><height></height><width/></image>
<image><description>Designer Glass 08</description><url>media/designer_glass_tile_08.jpg</url><height></height><width/></image>
Run Code Online (Sandbox Code Playgroud)
和XSL风格:
<div id="gallery">
<div id="feature" >
<xsl:apply-templates select="image[@type='feature']"/>
</div>
<div id="thumbs">
<xsl:apply-templates select="image[@type!='feature']"/>
</div>
</div>
Run Code Online (Sandbox Code Playgroud) 我是XPath的新手,现在已经花了几个小时摆弄它,所以我不能完全确定你是否能用它来做类似下面的事情.
好的,这是场景:我想从页面中找到一个链接.该链接只能通过它的文本值识别,即.<a>标签之间的文字(<a href="#">此链接<a>).到目前为止,我已经成功地将元素与该文本链接起来,唯一的问题是有一些人在说谎.
这些链接是从无序列表中找到的,这些列表前面是另一个链接标记,它可以作为一个非常好的"锚点"来开始搜索我想要找到的最终元素(即,然后我可以接受第一个匹配)
为了澄清一些事情,这是一个正在发生的事情的例子:
<a href="#">first dropdown menu</a>
<ul>
<li><a href="#">some link</a></li>
<li><a href="#">link i want to find</a></li>
</ul>
<-- *And i would actually want to find the thing from this list* -->
<a href="#">second dropdown menu</a>
<ul>
<li><a href="#">some link</a></li>
<li><a href="#">link i want to find</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我应该指出,我只想接收一个结果或一组结果,第一个元素是"正确"元素 - 我想要找到的元素.
编辑: 这个问题已经得到了解答,但有一些评论我应该多说一点,以便人们可以真正理解这个问题;)
因此,我们的想法是使用一个元素来指定另一个元素的位置,该元素可能会在文档周围散布重复的搜索结果.
基本上,如果您想从一组具有相同名称或值的元素的下拉菜单中找到给定的链接,您会遇到类似这样的事情.
基本上就是这样.我知道这一点仍然有点困难,但遗憾的是我很难解释它.我相信其他人可以做得更好,如果发生这种情况,我很乐意在这里加入这个描述.
你能帮我找一下下面例子中包含子元素c的所有元素吗?
<a>
<b name = "b1"></b>
<b name = "b2"><c/></b>
<b name = "b3"></b>
</a>
Run Code Online (Sandbox Code Playgroud)
xpath查询必须返回b2元素
第二个问题是我想要结合两个条件:我想得到名称="b2"并且具有元素c的元素但是这个语法似乎不起作用:// b [@ name ='b2'和c]
我想从我的XML文件中获取一个节点,该节点有一个前缀,例如"latest_",但这可能会改变,我希望我的XSLT尽可能流畅.这是我想要使用的XPath:
/data/stats/*_cost
Run Code Online (Sandbox Code Playgroud)
这应该与latest_cost
,newest_cost
,anything_cost
,有没有这样做的一种方式?
干杯:-)
似乎xpath中所有丰富的函数都可以执行"if".但是,我的引擎一直坚持"没有这样的功能",我几乎没有在网上找到任何文档(我发现了一些可疑的来源,但他们的语法不起作用)
我需要从字符串的末尾删除':'(如果存在),所以我想这样做:
if (fn:ends-with(//div [@id='head']/text(),': '))
then (fn:substring-before(//div [@id='head']/text(),': ') )
else (//div [@id='head']/text())
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我正在尝试使用select from XML将行插入表中.我想我很亲密.我哪里错了?
declare @xmldata xml;
set @xmldata = '<Database>
<PurchaseDetails>
<PurchaseDetail>
<Upc>72594206916</Upc>
<Quantity>77</Quantity>
<PurchaseDate>9/2010</PurchaseDate>
<PurchaseCity>Dallas</PurchaseCity>
<PurchaseState>TX</PurchaseState>
</PurchaseDetail>
<PurchaseDetail>
<Upc>72594221854</Upc>
<Quantity>33</Quantity>
<PurchaseDate>12/2013</PurchaseDate>
<PurchaseCity>Nashville</PurchaseCity>
<PurchaseState>TN</PurchaseState>
</PurchaseDetail>
</PurchaseDetails>
</Database>'
insert into PurchaseDetails
(Upc, Quantity, PurchaseDate, PurchaseCity, PurchaseState)
select
x.Rec.value('Upc','char(11)'),
x.Rec.value('Quantity','int'),
x.Rec.value('PurchaseDate','varchar(7)'),
x.Rec.value('PurchaseCity','varchar(50)'),
x.Rec.value('PurchaseState','char(2)')
from @xmlData.nodes('//Database/PurchaseDetails/PurchaseDetail') as x(Rec)
Run Code Online (Sandbox Code Playgroud)