Firebug生成的XPath无效,似乎有效

时间:2014-03-12 14:31:15

标签: xml xpath xslt-1.0

我正在尝试获取一个只出现在xml文件中的特定字段,该文件始终具有相同的格式,这应该是一个简单的任务。

我想要的字段是“MaterialDefinitionID”,我使用firefox firebug来复制xpath,除了这个之外,它对我已经完成的所有其他文档都有效。起初我以为XPATH是 一些复杂的事情,萤火虫没有做对,但它似乎对我有用。

我使用的XPATH是:/ CPS / DA / ScghP / lkm123 / ReqSqe / MATreq / MaterialDefinitionID

我试图从以下数据获取xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<CPS xmlns="http://www.wonderware.com/wwei/v0201/schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
  <AA/>  
  <DA> 
    <ScghP> 
      <ID>1741284-WOG</ID>  
      <Location/>  
      <PublishedDate>2014-03-05 16:03:36</PublishedDate>  
      <StartTime>1/28/2014 12:00:00 AM</StartTime>  
      <EndTime>1/28/2014 1:27:44 AM</EndTime>  
      <lkm123> 
        <ID>54123s0</ID>  
        <OLKM>54123s0 (EPIC Bar)</OLKM>  
        <StartTime>1/28/2014 12:00:00 AM</StartTime>  
        <EndTime>1/28/2014 1:27:44 AM</EndTime>  
        <Priority>0</Priority>  
        <ReqSqe> 
          <ID>000xxxx</ID>  
          <Description>epic item</Description>  
          <EarliestStartTime>1/28/2014 12:00:00 AM</EarliestStartTime>  
          <LatestEndTime>1/28/2014 1:27:44 AM</LatestEndTime>  
          <Duration>0H00M00SPT0</Duration>  
          <MArked/>  
          <MATreq> 
            <MaterialDefinitionID>54123s0</MaterialDefinitionID>  
            <Description>EPIC Bar</Description>  
            <Location/>  
            <Quantity/>  
            <MPRPAZ/>  
            <MPRPAZ/>  
            <LKPK>Required</LKPK> 
          </MATreq>  
          <ReqSqe/>  
          <LKPK>Required</LKPK> 
        </ReqSqe> 
      </lkm123>  
      <Any/> 
    </ScghP> 
  </DA> 
</CPS>

该文件已经过重构,以保护客户的数据,但相关的结构 组件已被保留。
感谢您的时间和任何帮助。

编辑:所以我试图定义一个命名空间并使用XSLT获取MaterialDefinitionID字段,我到目前为止的脚本是:

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ww="wonderware.com/wwei/v0201/schemas">

<xsl:template match="/">
    <xsl:for-each select="ww:CPS/ww:DA/ww:ScghP/ww:lkm123/ww:ReqSqe/ww:MATreq">
MaterialDefinitionID:  <xsl:apply-templates select="ww:MaterialDefinitionID"/>;
    </xsl:for-each>

</xsl:template>

</xsl:stylesheet>

完全像这样的东西适用于没有命名空间问题的其他文件,但不是 出于某种原因。

1 个答案:

答案 0 :(得分:1)

这是通常的命名空间问题 - XML中的xmlns="http://www.wonderware.com/wwei/v0201/schemas"表示该文档中没有前缀的所有元素名称都属于该命名空间,但XPath中未加前缀的名称引用 no中的元素命名空间。您需要使用XPath库或工具提供的任何机制将前缀绑定到命名空间,然后在XPath表达式中使用该前缀:

/ww:CPS/ww:DA/ww:ScghP/ww:lkm123/ww:ReqSqe/ww:MATreq/ww:MaterialDefinitionID

(其中ww前缀绑定到http://www.wonderware.com/wwei/v0201/schemas URI)