首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何连接文件

如何连接文件
EN

Stack Overflow用户
提问于 2013-05-24 09:55:08
回答 2查看 71关注 0票数 3

我的代码如下所示

代码语言:javascript
复制
int cnt =  ScriptInfoList.Count;
for (int i = 0; i < cnt; i++)
{
               var value =  PrepareXMLDocument(ScriptInfoList[i]);
}

private static XDocument PrepareXMLDocument(ScriptInfo scriptInfo)
{

            XDocument doc =
                         new XDocument(
                           new XElement("scriptfilenames",
                               new XElement("SqlEye",
                                   new XElement("scriptfilename", new XAttribute("Name", scriptInfo.FileName), new XAttribute("Type", scriptInfo.ScriptType),
                                       new XElement("SqlEyeWarnings",
                                        sqlEyeWarnings.Select(x => new XElement("SqlEyeWarning", new XAttribute("value", x)))),
                                        new XElement("FxCopsWarnings",
                                        fxCopWarnings.Select(x => new XElement("FxCopsWarning", new XAttribute("value", x)))),
                                        new XElement("SqlEyeRemarks",
                                        sqlEyeRemarks.Select(x => new XElement("SqlEyeRemark", new XAttribute("value", x)))),
                                        new XElement("FxCopsRemarks",
                                        fxCopRemarks.Select(x => new XElement("FxCopsRemark", new XAttribute("value", x))))
                                        ))));
            return doc;
}

锄头我能合并残缺的XDocuments吗?

如样

File1

代码语言:javascript
复制
<scriptfilenames>
  <SqlEye>
    <scriptfilename Name="ws_CallLogs_GetByCallId.sql" Type="SP">
      <SqlEyeWarnings>
        <SqlEyeWarning value="SD030:  object does not exist in database or is invalid for this operation in Database   : ws_CallLogs  @ line number : 63" />        
      </SqlEyeWarnings>
      <FxCopsWarnings>
        <FxCopsWarning value="Avoid using sp_ as a prefix for stored procedure " />        
      </FxCopsWarnings>
      <SqlEyeRemarks>
        <SqlEyeRemark value="SP017: Consider using EXISTS predicate instead of IN predicate  @ line number : 1" />
      </SqlEyeRemarks>
      <FxCopsRemarks>
        <FxCopsRemark value="Missing or order mismatch of Grant statement." />
      </FxCopsRemarks>
    </scriptfilename>
  </SqlEye>
</scriptfilenames>

File2

代码语言:javascript
复制
<scriptfilenames>
  <SqlEye>
    <scriptfilename Name="dbo.StopAutoRenewalEx.StoredProcedure.sql" Type="SP">
      <SqlEyeWarnings />
      <FxCopsWarnings>       
        <FxCopsWarning value="Missing schema while addressing object name" />
      </FxCopsWarnings>
      <SqlEyeRemarks>
        <SqlEyeRemark value="SP016: Update statements should not update primary key  @ line number : 70" />        
      </SqlEyeRemarks>
      <FxCopsRemarks>
        <FxCopsRemark value="Values hardcoded in where-clause condition " />
        <FxCopsRemark value="Values hardcoded in where-clause condition " />
        <FxCopsRemark value="Values hardcoded in where-clause condition " />
      </FxCopsRemarks>
    </scriptfilename>
  </SqlEye>
</scriptfilenames>

合并将是

代码语言:javascript
复制
<scriptfilenames>
  <SqlEye>
    <scriptfilename Name="ws_CallLogs_GetByCallId.sql" Type="SP">
      <SqlEyeWarnings>
        <SqlEyeWarning value="SD030:  object does not exist in database or is invalid for this operation in Database   : ws_CallLogs  @ line number : 63" />        
      </SqlEyeWarnings>
      <FxCopsWarnings>
        <FxCopsWarning value="Avoid using sp_ as a prefix for stored procedure " />        
      </FxCopsWarnings>
      <SqlEyeRemarks>
        <SqlEyeRemark value="SP017: Consider using EXISTS predicate instead of IN predicate  @ line number : 1" />
      </SqlEyeRemarks>
      <FxCopsRemarks>
        <FxCopsRemark value="Missing or order mismatch of Grant statement." />
      </FxCopsRemarks>
    </scriptfilename>

    <scriptfilename Name="dbo.StopAutoRenewalEx.StoredProcedure.sql" Type="SP">
      <SqlEyeWarnings />
      <FxCopsWarnings>       
        <FxCopsWarning value="Missing schema while addressing object name" />
      </FxCopsWarnings>
      <SqlEyeRemarks>
        <SqlEyeRemark value="SP016: Update statements should not update primary key  @ line number : 70" />        
      </SqlEyeRemarks>
      <FxCopsRemarks>
        <FxCopsRemark value="Values hardcoded in where-clause condition " />
        <FxCopsRemark value="Values hardcoded in where-clause condition " />
        <FxCopsRemark value="Values hardcoded in where-clause condition " />
      </FxCopsRemarks>
    </scriptfilename>
  </SqlEye>
</scriptfilenames>

我的解决办法是

代码语言:javascript
复制
StringBuilder sb = new StringBuilder();
            sb.AppendLine("<scriptfilenames><SqlEye>");
            int cnt =  ScriptInfoList.Count;

            for (int i = 0; i < cnt; i++)
            {
               var value =  PrepareXMLDocument(ScriptInfoList[i]);
               var findContent = value.Descendants("scriptfilename");
               sb.AppendLine(value.Descendants("scriptfilename").ToList()[0].ToString());
            }

            sb.AppendLine("</SqlEye></scriptfilenames>");

请提供一个更好的答案

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-24 10:43:40

使用LINQ选择<scriptfilename>元素的列表,并将它们添加到新的XDocument中:

代码语言:javascript
复制
var xmls = new List<XDocument>
{
    XDocument.Load("File1.xml"),
    XDocument.Load("File2.xml")
};

var resultXml = new XDocument(
    new XElement("scriptfilenames",
        new XElement("SqlEye",
            xmls.Descendants("scriptfilename"))));
票数 4
EN

Stack Overflow用户

发布于 2013-05-24 09:57:09

您只需将2个xml文件加载到2个文档中,然后在其中一个文档中获取<SqlEye>元素,并将document 2的DocumentElement作为第一个<SqlEye>文档的子文档追加。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16732259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档