javascript - 从 infopath 格式的 XML 中获取节点数据

标签 javascript jquery xml infopath2010

我需要从信息路径 xml 中的已知节点获取数据。我有以下代码 当我期望“140x”时,Facility 不返回任何内容。一旦我有了这个 key ,我就可以为我的每个节点使用像 my:CompletedByRpt 这样的兄弟节点。 :( 它必须在 IE10+ 中工作 #FeelMyPain

var xmlDoc = $.parseXML(xml); // In debugger I have the xml here. 
var $xml = $(xmlDoc);

Facility = $xml.find('my:cover').find('my:Facility').text();
$("#Facility").append('Facility =' + Facility );

使用我无法控制的这个 xml 源代码:(我把它变小了一点,擦洗了一下)

<?xml version="1.0" encoding="UTF-8"?>
<?mso-infoPathSolution name="urn:schemas-microsoft-com:office:infopath:PortWineSurvey-Template:-myXSD-2012-11-20T17-06-24" PIVersion="1.0.0.0" href="https://foo.com/Form%20Templates/PortWineSurvey_Template.xsn" productVersion="14.0.0" solutionVersion="1.0.0.583" ?>
<?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.3"?>
<my:myFields
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:pc="http://schemas.microsoft.com/office/infopath/2007/PartnerControls"
    xmlns:ma="http://schemas.microsoft.com/office/2009/metadata/properties/metaAttributes"
    xmlns:d="http://schemas.microsoft.com/office/infopath/2009/WSSList/dataFields"
    xmlns:q="http://schemas.microsoft.com/office/infopath/2009/WSSList/queryFields"
    xmlns:dfs="http://schemas.microsoft.com/office/infopath/2003/dataFormSolution"
    xmlns:dms="http://schemas.microsoft.com/office/2009/documentManagement/types"
    xmlns:xhtml="http://www.w3.org/1999/xhtml"
    xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2012-11-20T17:06:24"
    xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" xml:lang="en-us">
  <my:Cover>
    <my:winery>39B</my:winery>
    <my:Facility>140x</my:Facility>
    <my:FacilityTypeGroup>
      <my:FacilityType></my:FacilityType>
      <my:FacilityType>1</my:FacilityType>
      <my:FacilityType>4</my:FacilityType>
      <my:FacilityType>8</my:FacilityType>
      <my:FacilityType>2</my:FacilityType>
      <my:FacilityType>16</my:FacilityType>
    </my:FacilityTypeGroup>
    <my:OtherFacilityType>false</my:OtherFacilityType>
    <my:OtherFacilityTypeComments></my:OtherFacilityTypeComments>
    <my:CompletedByRpt>
      <my:CompletedByRpt_Title>The</my:CompletedByRpt_Title>
      <my:CompletedByRpt_Name>Man</my:CompletedByRpt_Name>
    </my:CompletedByRpt>
    <my:CompletedByRpt>
      <my:CompletedByRpt_Title>The Other</my:CompletedByRpt_Title>
      <my:CompletedByRpt_Name>Man</my:CompletedByRpt_Name>
    </my:CompletedByRpt>
    <my:FacilityOperator_Type>Private</my:FacilityOperator_Type>
    <my:NameOfPFSORpt>
      <my:NameOfPFSORpt_Title>Sr.</my:NameOfPFSORpt_Title>
      <my:NameOfPFSORpt_Name>Inigo Montoya</my:NameOfPFSORpt_Name>
      <my:NameOfPFSORpt_Pos>My big title</my:NameOfPFSORpt_Pos>
      <my:NameOfPFSORpt_Org>My cool workplace</my:NameOfPFSORpt_Org>
    </my:NameOfPFSORpt>
    <my:FacilityOwner_Type>Private</my:FacilityOwner_Type>
  </my:Cover>
  <my:FVF>
    <my:FVF_Compliance>2</my:FVF_Compliance>
  </my:FVF>
  <my:PVFU>
    <my:PVFU_Applicable>true</my:PVFU_Applicable>
    <my:PVFU_Suggestions></my:PVFU_Suggestions>
  </my:PVFU>
  <my:ICIO>
    <my:ICIO_Application>ipsum</my:ICIO_Application>
    <my:ICIO_ApprovedPFSP>2</my:ICIO_ApprovedPFSP>
  </my:ICIO>
  <my:Q1>
    <my:Q1_Ans>
      <my:Q1_Ans_A>0</my:Q1_Ans_A>
      <my:Q1_Ans_B>0</my:Q1_Ans_B>
      <my:Q1_Ans_C>0</my:Q1_Ans_C>
      <my:Q1_Ans_D>0</my:Q1_Ans_D>
      <my:Q1_Ans_E>0</my:Q1_Ans_E>
      <my:Q1_Ans_F>1</my:Q1_Ans_F>
    </my:Q1_Ans>
    <my:Q1_Ans_Val>0</my:Q1_Ans_Val>
    <my:Q1_Confidence>1</my:Q1_Confidence>
    <my:Q1_Comment>Some comments</my:Q1_Comment>
  </my:Q1>
</my:myFields>

在此先感谢您的耐心等待和帮助。

最佳答案

您的问题是冒号 (:) 是 jQuery 选择器中的特殊字符。它用于表示以下字符序列是伪选择器,例如。 :first:eq()

要防止这种行为,您需要在 : 前面加上 \\ 来转义它,如下所示:

Facility = $xml.find('my\\:cover').find('my\\:Facility').text();
$("#Facility").append('Facility =' + Facility );

关于javascript - 从 infopath 格式的 XML 中获取节点数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45822041/

相关文章:

javascript - 如何使用javascript滚动html中pdf对象元素的底部?

java - JaxB 属性值已定义。使用 <jaxb :property> to resolve this conflict

android - Android list 中的订购 Activity

javascript - 如何在 Backbone 中获取单个模型?

jquery - 当CSS选择器匹配N个元素时,如何只获取某个索引处的那个?

javascript - React 在从 API 调用接收数据后不更新 UI(使用 Hook )

php - laravel 5.2 使用循环添加 orWhere 子句返回错误

java - persistence.xml 事务类型 ="JTA"

javascript - 如何在我的 coffee.vim 语法文件中突出显示 "->"符号?

javascript - React Native 占位符图标