标签: xmlwriter

字符串转义为XML-Attribute

我看了一下XML转义的字符串,发现它非常有用.

我想做类似的事情:转义要在XML-Attribute中使用的字符串.

该字符串可能包含\ r \n.XmlWriter类产生类似\ r \n - >

我目前使用的解决方案包括XmlWriter和StringBuilder,而且非常难看.

任何提示?

编辑1:
抱歉让LarsH失望,买我的第一个方法是

public static string XmlEscapeAttribute(string unescaped)
{
    XmlDocument doc = new XmlDocument();
    XmlAttribute attr= doc.CreateAttribute("attr");
    attr.InnerText = unescaped;
    return attr.InnerXml;
}
Run Code Online (Sandbox Code Playgroud)

这是行不通的.XmlEscapeAttribute("Foo\r\nBar")会导致"Foo\r\nBar"

我使用.NET Reflector来了解XmlTextWriter如何转义属性.它使用内部的XmlTextEncoder类...

我的方法我目前正在使用这样的方法:

public static string XmlEscapeAttribute(string unescaped)
{
    if (String.IsNullOrEmpty(unescaped)) return unescaped;

    XmlWriterSettings settings = new XmlWriterSettings();
    settings.OmitXmlDeclaration = true;
    StringBuilder sb = new StringBuilder();
    XmlWriter writer = XmlWriter.Create(sb, settings);

    writer.WriteStartElement("a");
    writer.WriteAttributeString("a", unescaped);
    writer.WriteEndElement();
    writer.Flush();
    sb.Length -= "\" />".Length;
    sb.Remove(0, …
Run Code Online (Sandbox Code Playgroud)

c# xml stringbuilder xmlwriter escaping

9
推荐指数
1
解决办法
1万
查看次数

替换Xml节点/元素的innertext

首先,这是C#.我正在为NHS中的一小部分同事创建一个互联网仪表板.下面是一个示例xml文件,我需要更改其中的innertext.我需要替换特定元素,例如"Workshop1".因为我们有一些研讨会,所以我不能使用通用编写器,因为它将使用下面的这一段代码替换XML文档中的所有信息.

<?xml version="1.0" ?> 
   <buttons>
      <workshop1>hello</workshop1> 
      <url1>www.google.co.uk</url1> 
Run Code Online (Sandbox Code Playgroud)

我正在使用一个开关盒来选择一个特定的工作室,您可以在其中更改名称并添加研讨会的URL,使用下面的代码将替换整个文档.

public void XMLW()
    {
        XmlTextReader reader = new XmlTextReader("C:\\myXmFile.xml");
        XmlDocument doc = new XmlDocument(); 

        switch (comboBox1.Text)

        {
            case "button1":


                doc.Load(reader); //Assuming reader is your XmlReader 
                doc.SelectSingleNode("buttons/workshop1").InnerText = textBox1.Text;
                reader.Close();
                doc.Save(@"C:\myXmFile.xml");
                break;


        }


    }
Run Code Online (Sandbox Code Playgroud)

所以只是为了澄清我希望我的C#程序搜索XML文档找到元素"Workshop1"并用文本框中的文本替换innertext.并且能够保存它而无需用一个节点替换整个文档.谢谢你的期待.

c# xml xmlwriter xmlreader winforms

9
推荐指数
1
解决办法
3万
查看次数

什么是编写XML的最快方法

我需要经常创建XML文件,我选择XmlWrite来完成这项工作,我发现它花了很多时间在像WriteAttributeString这样的东西上(在某些情况下我需要写很多属性),我的问题是有没有更好的方法来创建xml文件?提前致谢.

.net c# xml xmlwriter

8
推荐指数
2
解决办法
7259
查看次数

指示XmlWriterSettings使用自闭标签

我正在使用XmlWriterSettings将Xml写入文件.我的元素只有属性,没有孩子.我希望他们输出为:

<element a="1" /> 
Run Code Online (Sandbox Code Playgroud)

代替

<element a="1"></element>
Run Code Online (Sandbox Code Playgroud)

我可以使用XmlWriterSettings吗?

编辑:

代码如下:

private void Mission_Save(string fileName)
    {
        StreamWriter streamWriter = new StreamWriter(fileName, false);
        streamWriter.Write(Mission_ToXml());
        streamWriter.Close();
        streamWriter.Dispose();

        _MissionFilePath = fileName;
    }

private string Mission_ToXml()
    {
        XmlDocument xDoc;
        XmlElement root;
        XmlAttribute xAtt;

        xDoc = new XmlDocument();

        foreach (string item in _MissionCommentsBefore)
            xDoc.AppendChild(xDoc.CreateComment(item));

        root = xDoc.CreateElement("mission_data");
        xAtt = xDoc.CreateAttribute("version");
        xAtt.Value = "1.61";
        root.Attributes.Append(xAtt); 
        xDoc.AppendChild(root);

        //Out the xml's!
        foreach (TreeNode node in _FM_tve_Mission.Nodes)
            Mission_ToXml_private_RecursivelyOut(root, xDoc, node);

        foreach (string item in _MissionCommentsAfter)
            xDoc.AppendChild(xDoc.CreateComment(item));


        //Make this look good …
Run Code Online (Sandbox Code Playgroud)

c# xml xmlwriter

8
推荐指数
1
解决办法
1万
查看次数

XML编写器和内存流c#

我正在使用XmlWriter创建一个文件,XmlWriter writer = XmlWriter.Create(fileName);它正在创建一个文件然后我还有一个我正在调用的函数, private void EncryptFile(string inputFile, string outputFile)它需要2个字符串输入和outpulfile,最后我有两个文件,一个是加密的,一个不是.我只想要一个加密文件,但是我的加密函数需要输入由XmlWriter创建的inputfile.有没有什么办法可以创建内存流并将其传递给我的函数而不是创建一个输入文件.我的加密功能

private void EncryptFile (string inputFile, string outputFile)
            string password = @"fdds"; // Your Key Here
            UnicodeEncoding UE = new UnicodeEncoding();

            byte[] key = UE.GetBytes(password);
            string cryptFile = outputFile;
            FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);

            RijndaelManaged RMCrypto = new RijndaelManaged();


            CryptoStream cs = new CryptoStream(fsCrypt,RMCrypto.CreateEncryptor(key,key),CryptoStreamMode.Write);

            FileStream fsIn = new FileStream(inputFile, FileMode.Open);

            int data;
            while ((data = fsIn.ReadByte()) != -1)
                cs.WriteByte((byte)data);
            cs.FlushFinalBlock();
            fsIn.Close();
            cs.Close();
            fsCrypt.Close();
        }
    }      
Run Code Online (Sandbox Code Playgroud)

c# xmlwriter memorystream

8
推荐指数
1
解决办法
2万
查看次数

PHP编译后如何启用xmlwriter?

ext/xmlwriter在我的Fedora 15系统上尝试设置phpMyFAQ时,我收到了一条消息.我在PHP手册上查了一下,得到了这个:

默认情况下启用此扩展.可以在编译时使用以下选项禁用它: - disable -xmlwriter

我使用yum在我的计算机上安装PHP,并考虑重新编译PHP是一件非常不愉快的工作.我可以通过编辑某些内容来启用它php.ini吗?或者在不重新编译PHP的情况下完成此任务的任何其他方法?如何?

php xmlwriter

7
推荐指数
4
解决办法
3万
查看次数

如何强制XmlWriter正确处理命名空间?

我想使用XmlWriter写这样的东西(所有在一个命名空间中):

<Root xmlns="http://tempuri.org/nsA">
  <Child attr="val" />
</Root>
Run Code Online (Sandbox Code Playgroud)

但我能得到的最接近的是:

<p:Root xmlns:p="http://tempuri.org/nsA">
  <p:Child p:attr="val" />
</p:Root>
Run Code Online (Sandbox Code Playgroud)

使用此代码:

using System;
using System.Text;
using System.Xml;

namespace ConsoleApplication1
{
    internal class Program
    {
        private const string ns = "http://tempuri.org/nsA";
        private const string pre = "p";

        private static void Main(string[] args)
        {
            var sb = new StringBuilder();
            var settings = new XmlWriterSettings
                     {
                       NamespaceHandling = NamespaceHandling.OmitDuplicates, 
                                             /* ineffective */             
                       Indent = true
                     };
            using (XmlWriter writer = XmlWriter.Create(sb, settings))
            {
                writer.WriteStartElement(pre, "Root", ns);
                writer.WriteStartElement(pre, "Child", ns); …
Run Code Online (Sandbox Code Playgroud)

xml xmlwriter .net-4.0 xml-namespaces

7
推荐指数
1
解决办法
2336
查看次数

如何使用WriteEndElement检查元素的名称

我正在用XmlWriter编写xml .我的代码有很多这样的部分:

xml.WriteStartElement("payload");
ThirdPartyLibrary.Serialise(results, xml);
xml.WriteEndElement(); // </payload>
Run Code Online (Sandbox Code Playgroud)

问题是该ThirdPartyLibrary.Serialise方法不可靠.它可能发生(取决于变量results)它不会关闭它打开的所有标签.结果,我的WriteEndElement行被变态,消耗了关闭库的悬挂标签,而不是写</payload>.

因此,我想对WriteEndElement进行一次检查,检查元素名称,并抛出异常,除非光标位于预期的元素.

xml.WriteEndElement("payload");
Run Code Online (Sandbox Code Playgroud)

XmlReader.ReadStartElement(name)除非光标位于文档中的预期位置,否则您可以将其视为抛出.

我怎样才能做到这一点?


编辑:此扩展方法的第二个用例是使我自己的代码更具可读性和可靠性.

.net c# extension-methods xmlwriter

7
推荐指数
1
解决办法
547
查看次数

xmlwriter 作为 xmlreader 的输入

我正在尝试从名称/值对创建一个 xml-structre。这适用于 xmlwriter。现在我想转换这个xml。

我认为最好的方法是使用 xmlwriter 作为 xmlreader 进行转换的源。但我不知道如何将 xmlwriter 设置为 xmlreader 的源。

我怎样才能做到这一点?

c# xmlwriter xmlreader

7
推荐指数
1
解决办法
4638
查看次数

使用XmlWriter创建xml文件

我在XmlWriter中遇到了Create方法的问题.

即使我使用msdn中的示例,它也无法正常工作. http://msdn.microsoft.com/en-us/library/kcsse48t.aspx

我为Windows商店应用创建了一个"空白页面"项目.在其中,我插入了来自msdn的示例代码,以测试XmlWriter类的工作方式.

VS给了我错误:

Cannot resolve method 'Create(string)', candidates are: 
System.Xml.XmlWriter Create(System.IO.Stream) (in class XmlWriter)
System.Xml.XmlWriter Create(System.IO.TextWriter) (in class XmlWriter)
System.Xml.XmlWriter Create(System.Text.StringBuilder) (in class XmlWriter)
System.Xml.XmlWriter Create(System.Xml.XmlWriter) (in class XmlWriter)
Run Code Online (Sandbox Code Playgroud)

这在控制台应用程序中没有问题.但我需要制作一个Windows应用商店.

我希望最终做的是添加到现有的xml文件.

有人可以告诉我为什么这不起作用,或者如何以不同的方式达到我的目标.

感谢您的时间.

编辑:

对不起,我的代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Xml;
using System.Xml.Linq;
using Windows.Data.Xml.Dom;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// The Blank Page item template is documented at …
Run Code Online (Sandbox Code Playgroud)

c# xml xmlwriter windows-store-apps

7
推荐指数
1
解决办法
1万
查看次数