【问题标题】:How can i delete between these tags <value></value>如何在这些标签之间删除 <value></value>
【发布时间】:2015-02-17 10:05:32
【问题描述】:

我已经问过这个问题,但没有回答正确。我想删除值标签之间的输出,但我不想这样做。我只想删除我的表数据中的值标签。你能帮我删除这些值吗?请记住,这些输出不是硬编码的,用户只是输入了这些值,所以每次我加载表单时,我都想删除标签之间的那些输出。

 <data name="CurrentSelectedUser_Label" xml:space="preserve"> 
   <value>Current selected record:</value> 
   <comment>[Font]Bold[/Font][DateStamp]2015/01/01 00:00:00[/DateStamp][Comment] this is a comment.!![/Comment]</comment> 
 </data> 
 <data name="FinEnrolment_Exit_Button" xml:space="preserve"> 
   <value>Exit Finger Enrolment</value> 
   <comment>[Font]Regular[/Font][DateStamp]2014/012/01 00:00:00[/DateStamp]  [Comment] this is a comment.!![/Comment]</comment> 
  </data> 

我试过这个,但我没有指定我的表格数据中的值标签。请参阅下面的编码;

    string text = File.ReadAllText(outputFilePath); 
    text = DeleteBetween1(text, "<value>", "</value>"); 

     public string DeleteBetween1(string STR, string FirstString, string LastString)
    {
        string regularExpressionPattern1 = "<value(.*?)</value>";
        Regex regex = new Regex(regularExpressionPattern1, RegexOptions.Singleline);
        MatchCollection collection = regex.Matches(STR.ToString());
        var val = string.Empty;
        foreach (Match m in collection)
        {
            val = m.Groups[1].Value;
            STR = STR.Replace(val, "");
        }
        STR = STR.Replace(val, "");
        return STR;
    }

【问题讨论】:

    标签: c# tags


    【解决方案1】:

    使用 Linq to XML

    class Program
    {
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load("XMLFile1.xml");
    
            foreach(var valueNode in doc.Descendants("data").SelectMany(n=> n.Elements("value")))
            {
                valueNode.Value = string.Empty;
            }            
        }
    }
    

    【讨论】:

    • 我试过了,它返回了所有的值标签。我只想要我的表“数据”中的值标签,因为你可以看到 Regex regex = new Regex(String.Format(@"(?).*?(?=)", FirstString , 最后一个字符串));
    • 表名是“data”我不会删除数据表中的值,看看我的xml代码
    • 我有有效的 xml。 XmlDocument _doc = new XmlDocument(); _doc.Load(outputFilePath); //文件名字符串 xmlcontents = _doc.InnerXml;
    • 你的方法连标签都删除了,我想删除标签之间的内容
    • 对我来说它删除了标签。我正在使用 linq 方法
    【解决方案2】:

    对上一个答案的应用我已经在 linqpad 中编写了一个测试程序,可以实现你想要的。 希望这种方法对您有用。

    我必须插入一个根节点,否则 XML 将无法解析,我称之为根。

    void Main()
    { 
        string xml = @"
        <root>
        <data name=""CurrentSelectedUser_Label"" xml:space=""preserve""> 
           <value>Current selected record:</value> 
           <comment>[Font]Bold[/Font][DateStamp]2015/01/01 00:00:00[/DateStamp][Comment] this is a comment.!![/Comment]</comment> 
         </data> 
         <data name=""FinEnrolment_Exit_Button"" xml:space=""preserve""> 
           <value>Exit Finger Enrolment</value> 
           <comment>[Font]Regular[/Font][DateStamp]2014/012/01 00:00:00[/DateStamp]  [Comment] this is a comment.!![/Comment]</comment> 
          </data></root>";
    
        var doc = XDocument.Load(new StringReader(xml));
    
        var nodes = doc.XPathSelectElements("/root/data/value"); 
    
    
        foreach (var node in nodes)
        {
            ((XElement)node).Value = string.Empty;
        }
    
        ... output the doc here.
    }
    

    【讨论】:

    • 它是 resx 文件(xml)。你能证明你在说什么吗,我有点迷茫