【问题标题】:XML DOMDocument method selectSingleSpace failing on carriage returns in tagsXML DOMDocument 方法 selectSingleSpace 在标签中的回车上失败
【发布时间】:2011-02-25 23:56:42
【问题描述】:

我正在尝试在 xml 文件中选择一个节点,该文件包含一个已知字符串,但也包含可能可变数量的空白字符,例如空格和回车符。有没有办法。当我尝试这样的行时:

Set objXML = CreateObject("MSXML2.DOMDocument.4.0")

Set objNode = objXML.documentElement.selectSingleNode("//Main/Subgroup/MyTag[Label='SomeText']")

它适用于这个:

<?xml version="1.0" encoding="UTF-16" ?> 
  <Main>
    <Subgroup>
      <MyTag>
        <Label>SomeText</Label>
      </MyTag>
    </Subgroup>
  </Main>

但它会返回 null :

<?xml version="1.0" encoding="UTF-16" ?> 
  <Main>
    <Subgroup>
      <MyTag>
        <Label>
          SomeText
        </Label>
      </MyTag>
    </Subgroup>
  </Main>

有没有办法用通配符或类似的东西来格式化标签文本,还是让它忽略空格的标志?我为 objXML 找到了这个 preserveWhiteSpace 成员变量,但将其设置为 false 似乎没有任何作用。

【问题讨论】:

    标签: xml vbscript


    【解决方案1】:

    如果你使用XPath,你可以使用contains(node, selectiontext)函数,即

    Set objXML = CreateObject("MSXML2.DOMDocument.4.0")
    objXML.setProperty "SelectionLanguage", "XPath"
    objXML.load "file.xml"
    Set objNode = objXML.documentElement.selectSingleNode("//Main/Subgroup/MyTag[contains(Label, 'SomeText')]")
    

    虽然这也将匹配任何包含“SomeText”的字符串。另一种方法是使用normalize-space(node):

    Set objNode = objXML.documentElement.selectSingleNode("//Main/Subgroup/MyTag[normalize-space(Label) = 'SomeText']")
    

    【讨论】:

    • 谢谢,这正是我正在寻找的简单、优雅的解决方案。
    猜你喜欢
    • 2023-03-09
    • 2019-09-28
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多