zoukankan      html  css  js  c++  java
  • 合并XML文件与在客户端管理Web服务引用

    MSDN上的一篇文章,讲述了XML文件的合并、架构验证以及Web服务的一些功能。
    http://www.microsoft.com/china/MSDN/library/data/xml/mis0303XMLFiles.mspx

    看完后,大受启发。

    说起来真惭愧,以前合并XML文档都是通过读取源XML文档的innerXML,然后与目标XML文档的innerXML组合,没想到还有这么好的方法:

    1、通过XmlNode的ImportNode方法,不过ImportNode只是在文档之间传输对象的控制,因此还需要调用AppendNode方法,或者其它的Node的插入方式来把Node添加到目的文档中。不过这样可以控制到Node,对于只需要合并特定的Node的过程有较好的控制能力。

    XmlDocument doc = new XmlDocument();
    XmlNode cont 
    = doc.CreateElement("Container");
    doc.AppendChild(cont);

    XmlDocument stuff 
    = new XmlDocument();
    stuff.Load(
    "product.xml");
    XmlNode imported 
    = 
      doc.ImportNode(stuff.DocumentElement, 
    true);
    doc.DocumentElement.AppendChild(imported);

    stuff.Load(
    "material.xml");
    imported 
    = doc.ImportNode(stuff.DocumentElement, true);
    doc.DocumentElement.AppendChild(imported);

    Console.WriteLine(doc.InnerXml);


    2、通过XmlReader和XmlWriter。一个XmlWriter负责生成目的XML文档,多个XmlReader负责读入多个源XML文档。XmlWriter提供有WriteNode方法,可以把XmlReader对象写入节点。不过,从表面上看,似乎更适合整篇XML文档的合并。

    XmlWriter tw = new XmlTextWriter(Console.Out);
    tw.WriteStartDocument();
    tw.WriteStartElement(
    "Container");

    XmlTextReader reader 
    = new XmlTextReader("product.xml");
    tw.WriteNode(reader, 
    true);

    reader 
    = new XmlTextReader("material.xml");
    tw.WriteNode(reader, 
    true);
    tw.WriteEndElement();
    tw.WriteEndDocument();

    3、XSLT。这个也是一个比较通用的方法,但是需要较复杂的XSLT指令来达到一些特定的合并目的,但是毫无疑问,相当简单。

    <xsl:transform version="1.0" 
      xmlns:xsl
    ="http://www.w3.org/1999/XSL/Transform">
      
    <xsl:template match="/">
        
    <Container>
          
    <xsl:copy-of select="document('product.xml')"/>
          
    <xsl:copy-of select="document('material.xml')"/>        
        
    </Container>
      
    </xsl:template>
    </xsl:stylesheet>

    对于客户端对Web服务的引用管理,以前都是在VS.NET直接引用Web服务,由于引用时,工具自动把Web服务的地址硬编码到了代码中,因此,为了防止Web服务的地址修改,就不得不手工修改代码,并引入一个XML文件专门记录Web服务的地址,现在看来,那都是“杨白劳”:-P。

    原来在Web服务引用工具wsdl.exe中,有一个参数:appsettingurlkey.通过指定这个参数的值,就可以通过在应用程序配置文件中增加appSetting达到管理Web服务的目的。例如:
    wsdl.exe /appsettingurlkey:EchoServiceLocation http://localhost/echoservice/echo.asmx?wsdl
    那么只要在配置文件中增加:
    <configuration>
      
    <appSettings>
        
    <add key="EchoServiceLocation" 
          value
    ="http://localhost/echoservice/echo.asmx" />
      
    </appSettings>
    </configuration>


    就可以了。不需要而外的修改代码,也不需要增加新的配置文件。
    这篇文章还讲了如何通过UDDI管理Web服务引用,通过Post和Get方式,以及JavaScript调用Web服务。
  • 相关阅读:
    poj 3026 Borg Maze
    poj2828 Buy Tickets
    poj3264 Balanced Lineup
    高精度运算
    poj1035 Spell checker
    poj2318 TOYS 点积叉积理解
    求两直线交点的一般做法
    C语言I博客作业05
    C语言I博客作业04
    C语言I博客作业07
  • 原文地址:https://www.cnblogs.com/iaxes/p/94781.html
Copyright © 2011-2022 走看看