Xml 具有多个名称空间的节点的XPATH
我有一个XML文件,它的内容在同一级别上有多个名称空间Xml 具有多个名称空间的节点的XPATH,xml,xpath,Xml,Xpath,我有一个XML文件,它的内容在同一级别上有多个名称空间 <?xml version="1.0" encoding="utf-8"?> <DeploymentConfiguration xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.aveva.com/AVEVA/NET/deployment/5000"> <InstallDir>c:\temp</InstallD
<?xml version="1.0" encoding="utf-8"?>
<DeploymentConfiguration xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.aveva.com/AVEVA/NET/deployment/5000">
<InstallDir>c:\temp</InstallDir>
<DashBoardMSIPath>c:\temp</DashBoardMSIPath>
<InstallDir>c:\temp</InstallDir>
<DatabaseManager>
<WorkhubDatabases>
<WorkHubDatabaseConfiguration>
<Server>Test</Server>
</WorkHubDatabaseConfiguration>
</WorkhubDatabases>
</DatabaseManager>
</DeploymentConfiguration>
c:\temp
c:\temp
c:\temp
试验
假设我需要更改服务器节点的值。服务器节点的XPath应该是什么。请提供帮助。不要将文档中的命名空间定义误认为API中的命名空间定义 您的XML定义了2个名称空间
带有前缀http://www.w3.org/2001/XMLSchema-instance
i
不带前缀http://www.aveva.com/AVEVA/NET/deployment/5000
http://www.aveva.com/AVEVA/NET/deployment/5000
您可以读取节点名称,如:
{http://www.aveva.com/AVEVA/NET/deployment/5000}:Server
XPath处理器获取自己的命名空间定义。在大多数API中,名称空间解析器都是可用的
PHP
在PHP中,您可以在DOMXpath实例上注册名称空间:
$xpath = new DOMXpath($document);
$xpath->registerNamespace('av', 'http://www.aveva.com/AVEVA/NET/deployment/5000');
注册后,可以在XPath表达式中使用定义的前缀:
$nodes = $xpath->evaluate('/av:DeploymentConfiguration/av:DatabaseManager/av:WorkhubDatabases/av:WorkHubDatabaseConfiguration/av:Server');
Javascript
在JavaScript中,它是evaluate()的第三个参数:
XSLT
在XSLT中,可以像在任何其他XML中一样定义它们
<xsl:stylesheet
version="1.0"
xmlns:av="http://www.aveva.com/AVEVA/NET/deployment/5000">
<!-- ... -->
</xsl:stylesheet>
<xsl:stylesheet
version="1.0"
xmlns:av="http://www.aveva.com/AVEVA/NET/deployment/5000">
<!-- ... -->
</xsl:stylesheet>