我试图让一些代码工作,扫描模板的XPath表达式,并用结果替换Xpath . 其中大部分都相当简单,但我遇到一个问题,即获取xpath表达式,该表达式根据当前上下文的不同值查找值 .

我的代码的简化版本;

//Iterates through all Posting Opjects
                    XPathNodeIterator loopIter = payload.getXpathList("//FolioInfo/Postings[NetAmount>10]");

                    foreach (XPathNavigator val in loopIter)
                    {

                        string xPathLookup = "//TrxInfo[Code=TrxCode]/Description"  //Returns no result
                        //string xPathLookup = "//TrxInfo[Code=1]/Description"  //Returns "Desc 2"
                        //string xPathLookup = "NetAmount"    //Works Correctly

                        XPathExpression rgxLookup = XPathExpression.Compile(xPathLookup);
                        XmlNamespaceManager manager = new XmlNamespaceManager(val.NameTable);
                        rgxLookup.SetContext(manager);

                        string tmpText = val.Evaluate(rgxLookup);  //Simplified - Changes depending on ReturnType

                        //Do stuff
                    }

“// TrxInfo [Code = TrxCode] / Description”的表达式是我遇到问题的那个 . 我可以用“// TrxInfo [Code = 1] / Description”或“// TrxInfo [Code = // FolioInfo / Postings [1] / TrxCode] / Description”替换它,它会起作用,但我无法得到它识别当前上下文只使用元素名称 .

我也尝试了“Code = .TrxCode”,文档建议应该可以使用,但没有乐趣 .

对于背景,其想法是用户可以根据需要配置显示作品集发布的模板 . 有过滤Postings列表的功能,所以我无法使用position()使用For循环遍历所有Postings .

简化的XML

<FolioInfo>
    <TrxInfo>
      <Description>Desc 2</Description>
      <Code>1</Code>
    </TrxInfo>
    <TrxInfo>
      <Description>Desc 1</Description>
      <Code>2</Code>
    </TrxInfo>
    <Postings>
      <TrxDate>2016-09-19</TrxDate>
      <TranActionId>123</TranActionId>
      <Quantity>1</Quantity>
      <NetAmount>25</NetAmount>
      <TrxCode>1</TrxCode>
    </Postings> 
    <Postings>
      <TrxDate>2016-09-20</TrxDate>
      <TranActionId>321</TranActionId>
      <Quantity>2</Quantity>
      <NetAmount>30</NetAmount>
      <TrxCode>2</TrxCode>
    </Postings>     
</FolioInfo>