Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 在XPath中通过concat()换行(\n)?_Xml_Xpath_Newline - Fatal编程技术网

Xml 在XPath中通过concat()换行(\n)?

Xml 在XPath中通过concat()换行(\n)?,xml,xpath,newline,Xml,Xpath,Newline,因此,我的系统中有一个员工的XML文档: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <couriersystem title="System" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd"> <!-- snip -->

因此,我的系统中有一个员工的XML文档:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<couriersystem title="System"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="schema.xsd">
    <!-- snip -->
    <employees>
        <employee eid="1">
            <nin>AZ123518D</nin>
            <firstname>Peter</firstname>
            <lastname>Smith</lastname>
            <gender>Male</gender>
            <dob>1994-02-11</dob>
            <email>ps11@gmail.com</email>
            <address>
                119, London Street, Nidrie, F57 8NE
            </address>
            <tel>07005748900</tel>
            <salary>30526</salary>
            <empbranch bid="1" />
            <supervisor sid="1" />
        </employee>
        <employee eid="2">
            <nin>CN174869F</nin>
            <firstname>Jennifer</firstname>
            <lastname>Black</lastname>
            <gender>Male</gender>
            <dob>1984-12-24</dob>
            <email>jb21@gmail.com</email>
            <address>
                161, South Road, Nidrie, W79 8WG
            </address>
            <tel>07555111222</tel>
            <salary>40576</salary>
            <empbranch bid="2" />
            <supervisor sid="1" />
        </employee>
        <employee eid="3">
            <nin>ET127654M</nin>
            <firstname>Aaron</firstname>
            <lastname>Jones</lastname>
            <gender>Male</gender>
            <dob>1968-03-15</dob>
            <email>aj31@gmail.com</email>
            <address>
                66, High Road, Yoker, Q47 4SR
            </address>
            <tel>07856471267</tel>
            <salary>30526</salary>
            <empbranch bid="3" />
            <supervisor sid="1" />
        </employee>
        <employee eid="4">
            <nin>GC765238A</nin>
            <firstname>Alistair</firstname>
            <lastname>Smith</lastname>
            <gender>Male</gender>
            <dob>1976-11-26</dob>
            <email>as11@gmail.com</email>
            <address>
                109, West Plaza, Clydebank, G55 8RC
            </address>
            <tel>07000123123</tel>
            <salary>25400</salary>
            <empbranch bid="4" />
            <supervisor sid="1" />
        </employee>
        <employee eid="5">
            <nin>HP146854D</nin>
            <firstname>Emma</firstname>
            <lastname>Reynolds</lastname>
            <gender>Male</gender>
            <dob>1995-05-05</dob>
            <email>er11@yahoo.com</email>
            <address>
                57, Scott Street, Aberdeen, O75 2KS
            </address>
            <tel>07625361536</tel>
            <salary>25400</salary>
            <empbranch bid="5" />
            <supervisor sid="7" />
        </employee>
        <!-- snip -->
    </employees>
    <!-- snip -->
</couriersystem>
但它只显示其余员工中的一名,同时也显示
\n
字符。


如何解决此问题?

若要在XPath中的
concat()
中解释
\n
,请使用
codepoints到字符串(10)
[credit::

然后将返回如下结果:

Name: Peter Smith
Gender: Male
D.O.B: 1994-02-11
Name: Jennifer Black
Gender: Male
D.O.B: 1984-12-24
Name: Aaron Jones
Gender: Male
D.O.B: 1968-03-15
Name: Alistair Smith
Gender: Male
D.O.B: 1976-11-26


次要说明:您的基本XPath 2.0表达式没有问题。正如我们在评论中发现的,由于网站的限制,结果不正确。请改为用于在线XPath 2.0测试。

好的,我用XSLT测试了您的XPath表达式,输出包含您想要的4个条目:

我的XSLT是:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/couriersystem">
    <xsl:copy-of select="//employee[supervisor/@sid='1']/concat('Name: ', concat(firstname/text(), ' ', lastname/text(), '\nGender: ', gender/text(), '\nD.O.B: ', dob/text()))" />
  </xsl:template>
</xsl:stylesheet>
其结果是:

<?xml version="1.0" encoding="UTF-8"?>
Name: Peter Smith
Gender: Male
D.O.B: 1994-02-11
Name: Jennifer Black
Gender: Male
D.O.B: 1984-12-24
Name: Aaron Jones
Gender: Male
D.O.B: 1968-03-15
Name: Alistair Smith
Gender: Male
D.O.B: 1976-11-26

姓名:彼得·史密斯
性别:男
D.O.B:1994-02-11
姓名:詹妮弗·布莱克
性别:男
D.O.B:1984-12-24
姓名:亚伦·琼斯
性别:男
D.O.B:1968-03-15
姓名:阿利斯泰史密斯
性别:男
D.O.B:1976-11-26

旁白:“Jennifer Black”是变性人吗?因为她有一个女性名字和一个男性;-)

但它只返回一个结果,这是最奇怪的事情!你在使用什么XPath 2.0库?我看到该站点的XPath 2.0实现存在这样的问题。请尝试该站点:@kjhuges解决了这个问题!但是我如何使用新的XPath 2.0库呢行?我使用
代码点来表示字符串(10)
在XPath 2.0中添加新行。如果您想向其他人展示,您可以更新您的代码,谢谢您的新站点!哈哈,我的朋友输入了数据,所以可能吧!;)我没有为此使用XSL,所以很遗憾,这并不能解决问题。我的最后一句话只是一个小笑话g。然而,我的XPath表达式基本上与acc相同接受答案,只需将
和#10;
替换为
codepoints to string(10)
,然后合并表达式和您的完成。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/couriersystem">
    <xsl:copy-of select="//employee[supervisor/@sid='1']/concat('Name: ', concat(firstname/text(), ' ', lastname/text(), '\nGender: ', gender/text(), '\nD.O.B: ', dob/text()))" />
  </xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>Name: Peter Smith\nGender: Male\nD.O.B: 1994-02-11 Name: Jennifer Black\nGender: Male\nD.O.B: 1984-12-24 Name: Aaron Jones\nGender: Male\nD.O.B: 1968-03-15 Name: Alistair Smith\nGender: Male\nD.O.B: 1976-11-26
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/couriersystem">
    <xsl:value-of select="'&#10;'" />
    <xsl:for-each select="//employee[supervisor/@sid='1']">
      <xsl:value-of select="concat('Name: ', firstname/text(), ' ', lastname/text(), '&#10;','Gender: ', gender/text(), '&#10;','D.O.B: ', dob/text(),'&#10;')" />
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
Name: Peter Smith
Gender: Male
D.O.B: 1994-02-11
Name: Jennifer Black
Gender: Male
D.O.B: 1984-12-24
Name: Aaron Jones
Gender: Male
D.O.B: 1968-03-15
Name: Alistair Smith
Gender: Male
D.O.B: 1976-11-26