0

我正在使用 C# 语言处理 Infopath,并且我尝试了很多时间来使用 XPathNavigator 来获得期望节点的值。但结果并不如我所愿。我有下面的xml脚本:

  <my:AuditInformation>
<my:AuditQuestions>
  <my:AuditInformationQuestions>
    <my:QuestionID>85</my:QuestionID>
    <my:QuestionText>Loadout Note No.</my:QuestionText>
    <my:QuestionAnswerTextbox>1</my:QuestionAnswerTextbox>
    <my:QuestionAnswerValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
    <my:QuestionTypeID>3</my:QuestionTypeID>
    <my:AuditQuestionsYesNoSection>
      <my:AuditQuestionYes>false</my:AuditQuestionYes>
      <my:AuditQuestionNo>false</my:AuditQuestionNo>
    </my:AuditQuestionsYesNoSection>
    <my:QuestionTooltipText>eg: 5AZA123456</my:QuestionTooltipText>
    <my:QuestionAnswerDropList>0</my:QuestionAnswerDropList>
  </my:AuditInformationQuestions>
  <my:AuditInformationQuestions>
    <my:QuestionID>87</my:QuestionID>
    <my:QuestionText>Shipment Number</my:QuestionText>
    <my:QuestionAnswerTextbox/>
    <my:QuestionAnswerValue>2</my:QuestionAnswerValue>
    <my:QuestionTypeID>1</my:QuestionTypeID>
    <my:AuditQuestionsYesNoSection>
      <my:AuditQuestionYes>false</my:AuditQuestionYes>
      <my:AuditQuestionNo>false</my:AuditQuestionNo>
    </my:AuditQuestionsYesNoSection>
    <my:QuestionTooltipText/>
    <my:QuestionAnswerDropList>0</my:QuestionAnswerDropList>
  </my:AuditInformationQuestions>
  <my:AuditInformationQuestions>
    <my:QuestionID>88</my:QuestionID>
    <my:QuestionText>Destination Port</my:QuestionText>
    <my:QuestionAnswerTextbox>3</my:QuestionAnswerTextbox>
    <my:QuestionAnswerValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
    <my:QuestionTypeID>3</my:QuestionTypeID>
    <my:AuditQuestionsYesNoSection>
      <my:AuditQuestionYes>false</my:AuditQuestionYes>
      <my:AuditQuestionNo>false</my:AuditQuestionNo>
    </my:AuditQuestionsYesNoSection>
    <my:QuestionTooltipText/>
    <my:QuestionAnswerDropList>0</my:QuestionAnswerDropList>
  </my:AuditInformationQuestions>
  <my:AuditInformationQuestions>
    <my:QuestionID>100</my:QuestionID>
    <my:QuestionText>Container ID</my:QuestionText>
    <my:QuestionAnswerTextbox>56456</my:QuestionAnswerTextbox>
    <my:QuestionAnswerValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
    <my:QuestionTypeID>3</my:QuestionTypeID>
    <my:AuditQuestionsYesNoSection>
      <my:AuditQuestionYes>false</my:AuditQuestionYes>
      <my:AuditQuestionNo>false</my:AuditQuestionNo>
    </my:AuditQuestionsYesNoSection>
    <my:QuestionTooltipText>Container ID number</my:QuestionTooltipText>
    <my:QuestionAnswerDropList>0</my:QuestionAnswerDropList>
  </my:AuditInformationQuestions>
  <my:AuditInformationQuestions>
    <my:QuestionID>101</my:QuestionID>
    <my:QuestionText>Container 2</my:QuestionText>
    <my:QuestionAnswerTextbox>6</my:QuestionAnswerTextbox>
    <my:QuestionAnswerValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
    <my:QuestionTypeID>3</my:QuestionTypeID>
    <my:AuditQuestionsYesNoSection>
      <my:AuditQuestionYes>false</my:AuditQuestionYes>
      <my:AuditQuestionNo>false</my:AuditQuestionNo>
    </my:AuditQuestionsYesNoSection>
    <my:QuestionTooltipText/>
    <my:QuestionAnswerDropList>0</my:QuestionAnswerDropList>
  </my:AuditInformationQuestions>
  <my:AuditInformationQuestions>
    <my:QuestionID>102</my:QuestionID>
    <my:QuestionText>Container 3</my:QuestionText>
    <my:QuestionAnswerTextbox>7</my:QuestionAnswerTextbox>
    <my:QuestionAnswerValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
    <my:QuestionTypeID>3</my:QuestionTypeID>
    <my:AuditQuestionsYesNoSection>
      <my:AuditQuestionYes>false</my:AuditQuestionYes>
      <my:AuditQuestionNo>false</my:AuditQuestionNo>
    </my:AuditQuestionsYesNoSection>
    <my:QuestionTooltipText/>
    <my:QuestionAnswerDropList>0</my:QuestionAnswerDropList>
  </my:AuditInformationQuestions>
  <my:AuditInformationQuestions>
    <my:QuestionID>322</my:QuestionID>
    <my:QuestionText>Exporting KR, RE, IN</my:QuestionText>
    <my:QuestionAnswerTextbox/>
    <my:QuestionAnswerValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
    <my:QuestionTypeID>2</my:QuestionTypeID>
    <my:AuditQuestionsYesNoSection>
      <my:AuditQuestionYes>false</my:AuditQuestionYes>
      <my:AuditQuestionNo>false</my:AuditQuestionNo>
    </my:AuditQuestionsYesNoSection>
    <my:QuestionTooltipText/>
    <my:QuestionAnswerDropList>0</my:QuestionAnswerDropList>
  </my:AuditInformationQuestions>
</my:AuditQuestions>

我想从两个节点获取两个值:

<my:QuestionText>Container ID</my:QuestionText>
<my:QuestionAnswerTextbox>56456</my:QuestionAnswerTextbox>

你能告诉我如何做到这一点,如果可以的话,请指导我或给我另一种方法或解决方案来做到这一点?

非常感谢。

4

1 回答 1

0

该 XML 中有重复节点,因此您需要使用 XPathNodeIterator 并循环遍历这些节点。尝试这个:

XPathNodeIterator auditInformationQuestionsNode = MainDataSource.CreateNavigator().Select("my:AuditQuestions/my:AuditInformationQuestions", NamespaceManager);
foreach (XPathNavigator node in auditInformationQuestions)
{
   string questionTextValue = node.SelectSingleNode("my:QuestionText", NamespaceManager).Value;
   string questionAnswerTextboxValue = node.SelectSingleNode("my:QuestionAnswerTextbox", NamespaceManager).Value;
}

您将在这些变量中获得所需的内容:questionTextValue 和 questionAnswerTextbox。

希望这会有所帮助。

注意:我假设您只提供了 XML 的一部分,因此您到 my:AuditInformationQuestions 节点的路径可能不同。您需要在那里使用完整路径来获取它。

于 2016-03-03T10:26:07.880 回答