none
如何用xslt从带有冒号的名称空间取值 RRS feed

  • 问题

  • 你好,可能是我的问题没有说清楚,下面是我的xml文件的前面部分:
    我的xpath路径是这样的:TestResults/ResultSet/TestGroup/TestGroup/Test/TestResult/TestData/c:Datum。我在xpath里面能够看到c:Datum里面的属性和属性值,但是我用altova在xslt编程环境下写下此路径能保存,应该是没有语法错误的,不过在点击翻译确定按钮后会出现:Error in XPath 2.0 expression Undefined namespace
    prefix - 'c'这样的翻译错误。不知道这是怎么回事!
    对了private void TestXml()
          {
          }

    在xml里面提示语法错误。
    你能在机子上实验一下吗?期待你的答复。



    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="C:\Users\Administrator\Desktop\1636.1-2007\1636.1-2007\改善.xslt"?>
    <TestResults xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:c="http://www.w3.org/1999/XSL/asjkasklgh" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xmlns:fn="http://www.w3.org/2005/xpath-functions">
     <Personnel>
      <SystemOperator ID="administrator" name="administrator"/>
     </Personnel>
     <ResultSet ID="206" name="C:\Demo\Reports\IEEE 1671.1 - Example3[07 31 2008][01 04 43]_Report[NO_UUT_SERIAL_NUM20][8 20 2006][1 15 37 PM].XML" startDateTime="2006-08-20T13:15:37" endDateTime="2006-08-20T13:16:02">
      <Outcome value="Failed"/>
      <TestGroup name="C:\Demo\Src\TestStand\IEEE 1671.1 - Example3[07 31 2008][01 04 43].seq#MainSequence" ID="206" startDateTime="2006-08-20T13:15:37" endDateTime="2006-08-20T13:16:02">
       <Outcome value="Failed"/>
       <TestGroup name="C:\Demo\Src\TestStand\IEEE 1671.1 - Example3[07 31 2008][01 04 43].seq#FaultDetectionAndIsolation/" ID="207" startDateTime="2006-08-20T13:15:37" endDateTime="2006-08-20T13:16:00">
        <Outcome value="Failed"/>
        <Test ID="208" name="V_CC_to_GND_Resistance_Test" startDateTime="2006-08-20T13:15:37" endDateTime="2006-08-20T13:15:43">
         <Outcome value="Passed"/>
         <TestResult ID="Numeric">
          <TestData>
           <c:Datum value="13.354571" xsi:type="c:double" nonStandardUnit="kOhm"/>
          </TestData>
          <TestLimits>
           <Limits>
            <c:SingleLimit comparator="GE">
             <c:Datum nonStandardUnit="kOhm" value="3.000000" xsi:type="c:double"/>
            </c:SingleLimit>
           </Limits>
          </TestLimits>
         </TestResult>
         <TestResult ID="TestResult_V_CC_Resistance [In]">
          <TestData>
           <c:Datum value="13.200000" xsi:type="c:double" nonStandardUnit="kOhm"/>
          </TestData>
         </TestResult>
         <TestResult ID="TestResult_V_CC_Resistance [Out]">
          <TestData>
           <c:Datum value="13.354571" xsi:type="c:double" nonStandardUnit="kOhm"/>
          </TestData>
         </TestResult>
        </Test>


    2009年6月11日 13:48

答案

全部回复

  • 你好 请使用下面的方法,你需要修改下你的xml文档 添加对应的命名空间


    private void TestXml()
          {
             string xml = @"<Test ID=""208"" name=""V_CC_to_GND_Resistance_Test"" startDateTime=""2006-08-20T13:15:37"" endDateTime=""2006-08-20T13:15:43"" xmlns:c=""http://temp.org/c"" xmlns:xsi=""http://temp.org/xsi"">
         <Outcome value=""Passed""/>
         <TestResult ID=""Numeric"">
          <TestData>
           <c:Datum value=""13.354571"" xsi:type=""c:double"" nonStandardUnit=""kOhm""/>
          </TestData>
          <TestLimits>
           <Limits>
            <c:SingleLimit comparator=""GE"">
             <c:Datum nonStandardUnit=""kOhm"" value=""3.000000"" xsi:type=""c:double""/>
            </c:SingleLimit>
           </Limits>
          </TestLimits>
         </TestResult>
         <TestResult ID=""TestResult_V_CC_Resistance [In]"">
          <TestData>
           <c:Datum value=""13.200000"" xsi:type=""c:double"" nonStandardUnit=""kOhm""/>
          </TestData>
         </TestResult>
         <TestResult ID=""TestResult_V_CC_Resistance [Out]"">
          <TestData>
           <c:Datum value=""13.354571"" xsi:type=""c:double"" nonStandardUnit=""kOhm""/>
          </TestData>
         </TestResult>
        </Test>";
             NameTable table = new NameTable();
             XmlNamespaceManager manger = new XmlNamespaceManager(table);
             manger.AddNamespace("c", "http://temp.org/c");
             XmlDocument dom = new XmlDocument(manger.NameTable);
             dom.LoadXml(xml);
             XmlNode node = dom.DocumentElement.SelectSingleNode("//c:Datum",manger);
             Response.Write(node.Attributes["value"].Value);
          }
    Denn ich gehor nur dir!坚持不懈!http://hi.baidu.com/1987raymond
    2009年6月12日 1:55
    版主
  • 你好,可能是我的问题没有说清楚,下面是我的xml文件的前面部分:
    我的xpath路径是这样的:TestResults/ResultSet/TestGroup/TestGroup/Test/TestResult/TestData/c:Datum。我在xpath里面能够看到c:Datum里面的属性和属性值,但是我用altova在xslt编程环境下写下此路径能保存,应该是没有语法错误的,不过在点击翻译确定按钮后会出现:Error in XPath 2.0 expression Undefined namespace
    prefix - 'c'这样的翻译错误。不知道这是怎么回事!
    对了private void TestXml()
          {
          }

    在xml里面提示语法错误。
    你能在机子上实验一下吗?期待你的答复。



    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="C:\Users\Administrator\Desktop\1636.1-2007\1636.1-2007\改善.xslt"?>
    <TestResults xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:c="http://www.w3.org/1999/XSL/asjkasklgh" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xmlns:fn="http://www.w3.org/2005/xpath-functions">
     <Personnel>
      <SystemOperator ID="administrator" name="administrator"/>
     </Personnel>
     <ResultSet ID="206" name="C:\Demo\Reports\IEEE 1671.1 - Example3[07 31 2008][01 04 43]_Report[NO_UUT_SERIAL_NUM20][8 20 2006][1 15 37 PM].XML" startDateTime="2006-08-20T13:15:37" endDateTime="2006-08-20T13:16:02">
      <Outcome value="Failed"/>
      <TestGroup name="C:\Demo\Src\TestStand\IEEE 1671.1 - Example3[07 31 2008][01 04 43].seq#MainSequence" ID="206" startDateTime="2006-08-20T13:15:37" endDateTime="2006-08-20T13:16:02">
       <Outcome value="Failed"/>
       <TestGroup name="C:\Demo\Src\TestStand\IEEE 1671.1 - Example3[07 31 2008][01 04 43].seq#FaultDetectionAndIsolation/" ID="207" startDateTime="2006-08-20T13:15:37" endDateTime="2006-08-20T13:16:00">
        <Outcome value="Failed"/>
        <Test ID="208" name="V_CC_to_GND_Resistance_Test" startDateTime="2006-08-20T13:15:37" endDateTime="2006-08-20T13:15:43">
         <Outcome value="Passed"/>
         <TestResult ID="Numeric">
          <TestData>
           <c:Datum value="13.354571" xsi:type="c:double" nonStandardUnit="kOhm"/>
          </TestData>
          <TestLimits>
           <Limits>
            <c:SingleLimit comparator="GE">
             <c:Datum nonStandardUnit="kOhm" value="3.000000" xsi:type="c:double"/>
            </c:SingleLimit>
           </Limits>
          </TestLimits>
         </TestResult>
         <TestResult ID="TestResult_V_CC_Resistance [In]">
          <TestData>
           <c:Datum value="13.200000" xsi:type="c:double" nonStandardUnit="kOhm"/>
          </TestData>
         </TestResult>
         <TestResult ID="TestResult_V_CC_Resistance [Out]">
          <TestData>
           <c:Datum value="13.354571" xsi:type="c:double" nonStandardUnit="kOhm"/>
          </TestData>
         </TestResult>
        </Test>









    2009年6月12日 3:36
  • 你好,可能是我的问题没有说清楚,下面是我的xml文件的前面部分:
    我的xpath路径是这样的:TestResults/ResultSet/TestGroup/TestGroup/Test/TestResult/TestData/c:Datum。我在xpath里面能够看到c:Datum里面的属性和属性值,但是我用altova在xslt编程环境下写下此路径能保存,应该是没有语法错误的,不过在点击翻译确定按钮后会出现:Error in XPath 2.0 expression Undefined namespace
    prefix - 'c'这样的翻译错误。不知道这是怎么回事!
    对了private void TestXml()
          {
          }

    在xml里面提示语法错误。
    你能在机子上实验一下吗?期待你的答复。



    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="C:\Users\Administrator\Desktop\1636.1-2007\1636.1-2007\改善.xslt"?>
    <TestResults xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:c="http://www.w3.org/1999/XSL/asjkasklgh" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xmlns:fn="http://www.w3.org/2005/xpath-functions">
     <Personnel>
      <SystemOperator ID="administrator" name="administrator"/>
     </Personnel>
     <ResultSet ID="206" name="C:\Demo\Reports\IEEE 1671.1 - Example3[07 31 2008][01 04 43]_Report[NO_UUT_SERIAL_NUM20][8 20 2006][1 15 37 PM].XML" startDateTime="2006-08-20T13:15:37" endDateTime="2006-08-20T13:16:02">
      <Outcome value="Failed"/>
      <TestGroup name="C:\Demo\Src\TestStand\IEEE 1671.1 - Example3[07 31 2008][01 04 43].seq#MainSequence" ID="206" startDateTime="2006-08-20T13:15:37" endDateTime="2006-08-20T13:16:02">
       <Outcome value="Failed"/>
       <TestGroup name="C:\Demo\Src\TestStand\IEEE 1671.1 - Example3[07 31 2008][01 04 43].seq#FaultDetectionAndIsolation/" ID="207" startDateTime="2006-08-20T13:15:37" endDateTime="2006-08-20T13:16:00">
        <Outcome value="Failed"/>
        <Test ID="208" name="V_CC_to_GND_Resistance_Test" startDateTime="2006-08-20T13:15:37" endDateTime="2006-08-20T13:15:43">
         <Outcome value="Passed"/>
         <TestResult ID="Numeric">
          <TestData>
           <c:Datum value="13.354571" xsi:type="c:double" nonStandardUnit="kOhm"/>
          </TestData>
          <TestLimits>
           <Limits>
            <c:SingleLimit comparator="GE">
             <c:Datum nonStandardUnit="kOhm" value="3.000000" xsi:type="c:double"/>
            </c:SingleLimit>
           </Limits>
          </TestLimits>
         </TestResult>
         <TestResult ID="TestResult_V_CC_Resistance [In]">
          <TestData>
           <c:Datum value="13.200000" xsi:type="c:double" nonStandardUnit="kOhm"/>
          </TestData>
         </TestResult>
         <TestResult ID="TestResult_V_CC_Resistance [Out]">
          <TestData>
           <c:Datum value="13.354571" xsi:type="c:double" nonStandardUnit="kOhm"/>
          </TestData>
         </TestResult>
        </Test>


    2009年6月12日 6:00
  • 你好你的问题是一样的
    如果是用Xmldocument类读取xml 那么记得一定要添加对应的namespace

    NameTable table = new NameTable();
             XmlNamespaceManager manger = new XmlNamespaceManager(table);
             manger.AddNamespace("c", "http://www.w3.org/1999/XSL/asjkasklgh");
             XmlDocument dom = new XmlDocument(manger.NameTable);
             dom.LoadXml(xml);


    Denn ich gehor nur dir!坚持不懈!http://hi.baidu.com/1987raymond
    2009年6月12日 6:17
    版主
  • 你好请参看我给你回复的这篇文章 http://social.microsoft.com/Forums/zh-CN/xmlwebserviceszhchs/thread/de308a75-6b7f-4871-99e1-dee4242377ec
    Denn ich gehor nur dir!坚持不懈!http://hi.baidu.com/1987raymond
    2009年6月12日 6:20
    版主
  • 非常感谢1987raymond,我成功的取出来了。
    2009年6月12日 7:14
  • 不用谢 呵呵
    Denn ich gehor nur dir!坚持不懈!http://hi.baidu.com/1987raymond
    2009年6月12日 7:27
    版主
  • 你好,请分清XML语言和C#语言的区别,不要把一个语言的问题发在另一个语言的论坛。
    MSMVP VC++
    2009年6月12日 16:17
    版主
  • 这种问题看一下.net sdk就能解决了。
    【孟子E章】
    2009年6月13日 9:57
    版主