Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#/XSLT:线性化XML部分工作代码_C#_Xml_Xslt - Fatal编程技术网

C#/XSLT:线性化XML部分工作代码

C#/XSLT:线性化XML部分工作代码,c#,xml,xslt,C#,Xml,Xslt,输入XML: <foobar> <Comments> Reported By: L &amp; A Q TESTING, TESTED Date of TESTING: Available TESTING unavailable to resolve Test issue. Additional Comments: Comments

输入XML:

<foobar>
          <Comments>
            Reported By:   L &amp; A Q  TESTING, TESTED
            Date of TESTING:   Available
            TESTING  unavailable to resolve Test issue.
            Additional  Comments: Comments

            Had to go   into Testing System and change to the correct notification group. Per sup.
          </Comments>
</foobar>
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:strip-space elements="*"/>
    <xsl:output indent="no" omit-xml-declaration="yes"/>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="text()">
        <xsl:value-of select="normalize-space()" />
    </xsl:template>
    <xsl:template match="text()[../*]"/>
</xsl:stylesheet>
<foobar><Comments>Reported By: L &amp; A Q TESTING, TESTED Date of TESTING: Available TESTING unavailable to resolve Test issue. Additional Comments: Comments Had to go into Testing System and change to the correct notification group. Per sup.</Comments></foobar>
<foobar>
  <Comments>Reported By: L &amp; A Q TESTING, TESTED Date of TESTING: Available TESTING unavailable to resolve Test issue. Additional Comments: Comments Had to go into Testing System and change to the correct notification group. Per sup.</Comments>
</foobar>
还是不走运!!使用

XPathDocument xpathXmlOrig=新的XPathDocument(字符串输入)在我的C#代码中,错误显示为。。条形图空间不能应用于已加载的文档!!所以我使用的是XMLReader

添加C#代码以供参考

        XslCompiledTransform xslTransform = new XslCompiledTransform();
        string xslinput = "<?xml version=\"1.0\"?><xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"><xsl:strip-space elements=\"*\"/><xsl:output indent=\"no\" omit-xml-declaration=\"yes\"/><xsl:template match=\"@*|node()\"><xsl:copy><xsl:apply-templates select=\"@*|node()\"/></xsl:copy></xsl:template><xsl:template match=\"text()[not(../*)]\"><xsl:value-of select=\"normalize-space()\" /></xsl:template><xsl:template match=\"text()[../*]\"/></xsl:stylesheet>";

        string strXmlOutput = string.Empty;
        StringWriter swXmlOutput = null;
        MemoryStream objMemoryStream = null;
        swXmlOutput = new StringWriter();
        objMemoryStream = new MemoryStream();

        UTC_Calc obj = new UTC_Calc();
        XsltArgumentList xslArg = new XsltArgumentList();
        ..........
        ........
        XmlReader reader = XmlReader.Create(string_xmlInput, settings);

        XsltSettings xslsettings = new XsltSettings(false, true);
        MemoryStream memStream = new MemoryStream();

        XmlReader rd = XmlReader.Create(new StringReader(xslinput));

        xslTransform.Load(rd);
        xslTransform.Transform(reader, xslArg, objMemoryStream);
        objMemoryStream.Position = 0;
        StreamReader objStreamReader = new StreamReader(objMemoryStream);
        strXmlOutput = objStreamReader.ReadToEnd();
        ..........
        ........

        XmlDocument outputxml = new XmlDocument();
        outputxml.LoadXml(strXmlOutput);
        outputxml.Save(outputfile.FileName);
xslcomiledtransform xslTransform=new xslcomiledtransform();
字符串xslinput=“”;
string strxmloput=string.Empty;
StringWriter swXmlOutput=null;
MemoryStream objMemoryStream=null;
swXmlOutput=新的StringWriter();
objMemoryStream=newmemoryStream();
UTC_Calc obj=新UTC_Calc();
XsltArgumentList xslArg=new XsltArgumentList();
..........
........
XmlReader=XmlReader.Create(字符串输入,设置);
XsltSettings xslsettings=新的XsltSettings(false,true);
MemoryStream memStream=新的MemoryStream();
XmlReader rd=XmlReader.Create(新建StringReader(xslinput));
xslTransform.Load(rd);
Transform(reader、xslArg、objMemoryStream);
objMemoryStream.Position=0;
StreamReader objStreamReader=新的StreamReader(objMemoryStream);
strXmlOutput=objStreamReader.ReadToEnd();
..........
........
XmlDocument outputxml=新的XmlDocument();
LoadXml(strXmlOutput);
保存(outputfile.FileName);

您能否浏览一下您的代码,并查找您提供给写入流的任何
XmlWriterSettings
?再次检查是否未使用缩进输出选项

如果没有类似的事情发生,也许显式地传入声明不应进行格式化的
XmlWriterSettings
可以解决这个问题

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = false;
/* .... */

var outWriter = XmlWriter.Create(outputstream, settings);
已使用

TextWriter writer = File.CreateText(outputfile.FileName);
writer.Write(strXmlOutput);
writer.Close();
代替现有代码:

XmlDocument outputxml = new XmlDocument();
outputxml.LoadXml(strXmlOutput);
outputxml.Save(outputfile.FileName);
我想我也理解其中的区别

XmlDocument(
outputxml.LoadXml,outputxml.Save
)默认情况下强制缩进。。虽然strXmlOutput没有任何缩进

我得到了杰克·海特的答案。。 将其标记为社区维基,因为这不是我自己的答案。此外,还可以使用更有用的信息编辑此答案(如果需要)


+1获取一组非常全面的数据。感谢您的欣赏。值得一提的是,我用
xsltproc
和Saxon(9.1.0.5J)尝试了您的样式表,在这两种情况下,输出都是您的预期输出。是的,它在Saxon的Apache Xalan上工作。。甚至在VisualStudio中进行xslt调试。。但当我在代码中调用时就不是了。。你的建议很有价值。我已经发布了实际解决方案作为答案,并接受了。。我对你的答案投了赞成票。。我的答案也是维基的,任何人都可以编辑!(如果需要一些建议,请在您有时间时查看)再次感谢!
XmlDocument outputxml = new XmlDocument();
outputxml.LoadXml(strXmlOutput);
outputxml.Save(outputfile.FileName);