精华内容
下载资源
问答
  • xml空节点修改失败

    2017-02-27 14:02:39
    对于有文本内容xml节点,如a 可以使用如下代码修改其文本内容: QDomNode oldnode = node.firstChild(); node.firstChild().setNodeValue(List.at(3)); QDomNode newnode = node.firstChild(); node.replace

    今天使用xml时发现一个问题:

    xml会自动将空节点 变为<node/>

    对于有文本内容的xml节点,如<node>a<node/>

    可以使用如下代码修改其文本内容:

    QDomNode oldnode = node.firstChild();
    node.firstChild().setNodeValue(List.at(3));
    QDomNode newnode = node.firstChild();
    node.replaceChild(newnode,oldnode);
    而对于<node/>或者 <node></node>这种,代码则没用,网上查了半天也没找到对应

    的问题答案.


    通过研究发现,代码要修改如下:

    if(node.hasChildNodes())
    {
        QDomNode oldnode = node.firstChild();
        node.firstChild().setNodeValue(List.at(4));
        QDomNode newnode = node.firstChild();
        node.replaceChild(newnode,oldnode);
    }
    else
    {
        QDomText text;
        text = doc.createTextNode(List.at(4));
        node.appendChild(text);
        text.clear();
    }

    对于有文本的节点,其文本为该节点的第一个子节点,

    但对于空节点,是没有文本节点的,所以使用第一种修改会失败.





    展开全文
  • C# 生成XML空元素/空节点自动换行解决方案 使用DataSet可以直接输出XML,并可指定是否带有Schema:  ds.WriteXml(XMLFile,XmlWriteMode.WriteSchema ) 不过,这样将不会输出值Null的字段,如: 你...
     
    

    使用DataSet可以直接输出XML,并可指定是否带有Schema: 

    ds.WriteXml(XMLFile,XmlWriteMode.WriteSchema  )  

    不过,这样将不会输出值为Null的字段,如:

    你可能希望结果是这样: 

    <a>1</a>  
    <b>2</b>  
    <c></c> 

    但结果为:

    <a>1</a>  
    <b>2</b>  

    c没有输出在XML文件中,其实我觉得这样更合理,否则,如何区分null和""呢?如果希望输出c,那只能通过XmlDocument自己写了:

    复制代码
    //初始化一个xml实例  
    XmlDocument XmlDoc = new XmlDocument();  
    XmlNode xmlnode = XmlDoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");  
    XmlDoc.AppendChild(xmlnode);  
    //创建xml的根节点  
    XmlElement rootElement = XmlDoc.CreateElement("Rows");  
    //将根节点加入到xml文件中(AppendChild)  
    XmlDoc.AppendChild(rootElement);  
      
    foreach (DataRow dr in ds.Tables[0].Rows)  
    {  
        XmlElement xmlRow = XmlDoc.CreateElement("Row");  
        rootElement.AppendChild(xmlRow);  
        foreach (DataColumn col in ds.Tables[0].Columns)  
        {  
            XmlElement xmlCol = XmlDoc.CreateElement(col.ColumnName);  
            xmlCol.InnerText = dr[col].ToString();  
            xmlRow.AppendChild(xmlCol);  
        }  
    }  
      
    XmlDoc.Save(file);  
    复制代码

    空节点显示出来了,但是,另一个问题出现了,空节点换行了,成了这样:

    <a>1</a>  
    <b>2</b>  
    <c>  
    </c>

    虽然这样也符合XML标准,使用C#也很容易可以读取该XML,但是对于一些有审美洁癖的人和已经写好的XML导入程序来说,总希望能改进一下,将空元素放到一行里边去。有人说使用XmlTextWriter 的Formatting,即:

    using (XmlTextWriter xtw = new XmlTextWriter(file, null))  
    {  
        xtw.Formatting = Formatting.None;  
        XmlDoc.Save(xtw);  
    }  

    但是这样一来,XML里所有内容都不换行全连在一起了,可读性更差。实际上值为NULL或者""时,不要给InnerText赋值就行了:

    if (dr[col].ToString() != null && dr[col].ToString() != "")  
    {  
        xmlCol.InnerText = dr[col].ToString();  
    }  

    输出:

    <a>1</a>  
    <b>2</b>  
    <c/>  
    展开全文
  • c#设置xml内容不换行:添加属性xsi:nil=true的空节点便可实现,感兴趣的你可以参考下本文,或许有意想不到的收获
  • 解析XML获取节点内容

    2017-03-01 23:03:18
    import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date;...import javax.xml.parsers.*; import org.w3c.dom.Document; import org.w3c.dom.Node; impo

    import java.io.File;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import javax.xml.parsers.*;
    import org.w3c.dom.Document;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;


    /***
     * 
     * @author yuanshishi
     * 2017-02-25 读取xml内容 
     * 配置节点 对业务是否进行开放
     * xmlName 传一个xml名称可以带.xml或者不带
     * xmlFlag 传一个配置的节点名称
     * 本次项目中 读取节点内容 1表是业务开放 0表示业务关闭 
     * 
     * cName_Value 为返回值(1、0、NotFindNode)   如果 为null或者为"" 时表示没有配置xml或者没有xml的节点(NotFindNode 表是 未配置节点等)
     * 配置节点名称找不到或者节点内容为空时,方法返回NotFindNode
     */
    public class XMLUtil{

    public static String cName_Value="";//获取配置的xml标签 对业务是否开放

    /**
    * yuanshishi
    * 2017-02-26 15:09  周日
    * @param xmlName 表示xml的名字 如xxxx.xml
    * @param xmlFlag 表示xml的标签 如<root>等等
    * @return cName_Value 返回标签内容
    * 将xxx.xml放到与webRoot同一级目录下面  不是webRoot下面
    */
    public  String ByDoMReadXML(String xmlName,String xmlFlag){
    try {
    //创建DOM文档对象
    DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = dFactory.newDocumentBuilder();
    Document doc;

    if((xmlName.trim()).indexOf(".xml")!=-1){
    System.out.println("--------获取当前的配置文件为:"+xmlName+";>>>>>>>>>>>获取当前的节点名为:"+xmlFlag);
    }else{
    xmlName=xmlName+".xml";
    System.out.println("******获取当前的配置文件为:"+xmlName+";*****>>>>>>>>>>>获取当前的节点名为:"+xmlFlag);
    }
    doc = builder.parse(new File(xmlName));//放到与webRoot同一级目录下面  不是webRoot下面

    //获取包含类名的文本节点
    NodeList nl = doc.getElementsByTagName(xmlFlag.trim());//获取节点名称
    Node classNole = nl.item(0).getFirstChild();//获取根节点  
    cName_Value = classNole.getNodeValue()==null?"":classNole.getNodeValue();//获取节点值
    System.out.println("=======获取xml标签返回的值为cName_Value========"+cName_Value);
    return cName_Value;
    } catch (Exception e) {
    //配置节点名称找不到或者节点内容为空时
    cName_Value="NotFindNode";
    System.out.println("cName_Value===="+cName_Value);
    return cName_Value;
    }
    }


    /**

    * yuanshishi
    * 2017-02-26 15:30  周日
    * @param xmlName 表示xml的名字 如xxxx.xml
    * @param xmlNodeFlag 表示xml的标签 如<root>等等
    * @return cName_Value 返回标签内容
    * 将xxx.xml放在src类路径下面
    */
        public String getXmlNodeValue(String xmlName,String xmlNodeFlag){  
    try {
      // 解析config.xml配置文件 ,返回文件存储路径  
           DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
           DocumentBuilder builder = factory.newDocumentBuilder();  
           if((xmlName.trim()).indexOf(".xml")!=-1){
    System.out.println("--------获取当前的配置文件为:"+xmlName+";>>>>>>>>>>>获取当前的节点名为:"+xmlNodeFlag);
    }else{
    xmlName=xmlName+".xml";
    System.out.println("******获取当前的配置文件为:"+xmlName+";*****>>>>>>>>>>>获取当前的节点名为:"+xmlNodeFlag);
    }
           String configPath = this.getClass().getResource("/").getPath() + File.separator+xmlName;  
           System.out.println("----------配置文件存在的路径configPath===="+configPath);
           Document document = builder.parse(configPath);  
     
           NodeList nodeList = document.getElementsByTagName(xmlNodeFlag);  
           Node node = nodeList.item(0);  
           cName_Value = node.getTextContent();  
           System.out.println("=======获取xml标签返回的值为cName_Value========"+cName_Value);
           return cName_Value;
    } catch (ParserConfigurationException e) {
    //配置节点名称找不到或者节点内容为空时
    cName_Value="NotFindNode";
    System.out.println("----------cName_Value===="+cName_Value);
    return cName_Value;
    } catch (SAXException e) {
    //配置节点名称找不到或者节点内容为空时
    cName_Value="NotFindNode";
    System.out.println("***********cName_Value===="+cName_Value);
    return cName_Value;
    } catch (IOException e) {
    //配置节点名称找不到或者节点内容为空时
    cName_Value="NotFindNode";
    System.out.println("#######cName_Value===="+cName_Value);
    return cName_Value;
    }catch (NullPointerException e){
    //配置节点名称找不到或者节点内容为空时
    cName_Value="NotFindNode";
    System.out.println("#######cName_Value===="+cName_Value);
    return cName_Value;
    }
      
        }  

        /**
         * 2017-02-26 15:33
         * @return bean对象
         */
        public static Object getBean(){
    try {
    //创建DOM文档对象
    DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = dFactory.newDocumentBuilder();
    Document doc;
    doc = builder.parse(new File("config.xml"));//放到与webRoot同一级目录下面  不是webRoot下面
    //doc = builder.parse("config.xml");

    //获取包含类名的文本节点
    NodeList nl = doc.getElementsByTagName("className");//获取节点名称
    Node classNole = nl.item(0).getFirstChild();//获取根节点  
    String cName = classNole.getNodeValue();//获取节点值

    //通过java反射机制  类名生成实例对象并将其返回
    Class c = Class.forName(cName);
    Object obj = c.newInstance();
    return obj;

    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }

    }
        
        /**
         * 获取系统时间
         * @return
         */
        public static String getdate(){
     SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
       String  dateTime=df.format(new Date());
    return dateTime;
    }
        
        

    }
    展开全文
  • 很短但是很实用 哈哈
  • 修改xml节点数据内容

    千次阅读 2013-03-12 16:30:41
    今天做程序的时候,服务端接收到xml,并解析,进行了一个判断,如果name节点内容为空,则系统自动给该节点赋值,把赋值之后的xml再传递给另外一个服务使用, 这里就涉及到了修改xml内容,开始想着是把xml重新...

    今天做程序的时候,服务端接收到xml,并解析,进行了一个判断,如果name节点的内容为空,则系统自动给该节点赋值,把赋值之后的xml再传递给另外一个服务使用,

    这里就涉及到了修改xml的内容,开始想着是把xml重新封装一遍,但是这样会对效率、内存产生很大的影响,后来看了看xml的api,有个doc.asXML的方法,可以实现修改了xml

    内容,然后改变xml的内容。具体代码如下

    Document doc = DocumentHelper.parseText(xml);
    
    Element rootElt = doc.getRootElement(); // 获取根节点
       Element listRecords = rootElt.element("ListRecords"); // 获取根节点下的子节点ListRecords
       Iterator recodds = listRecords.elementIterator("record");// 获取record节点集合
       // 遍历record节点 每个record节点是一个handle
       while (recodds.hasNext()) {
        Element recordEle = ((Element) recodds.next());
        // 取出header节点
        Element header = recordEle.element("header");
        // 取出header节点下的identifier节点内容(注册的handleID)
        Element  identifierElement = header.element("identifier");
        if(“”.equals(identifier)){
         identifier = this.createHandleSuffix() ;
    
        // 修改节点内容 
         identifierElement.setText(identifier);
        }
    
    // 其他解析代码省略
    
    
    // 执行以下一行代码,返回的xml文件则是修改后的xml文件
    
    doc.asXML();
    

    红色代码为重点内容

    展开全文
  • C# xml节点内容全部清空

    千次阅读 2017-02-17 09:12:19
    1、test.xml文件内容     2、实现代码  bool bSuccess = true;  while (bSuccess)  {  string strTaskListPath = CommVar.curExecPath + "test.xml";  
  • XML 节点类型

    千次阅读 2008-10-27 15:55:00
    基本的节点类型:文档、原始、属性和文本 XML 中最常见的节点类型包括:元素:元素是 XML 的基本构造模块。通常,元素拥有子元素、文本节点,或两者的组合。元素节点也是能够拥有属性的唯一节点类型。 属性:属性...
  • Linux Shell | 解析xml节点

    千次阅读 2019-11-13 22:48:29
    shell解析xml节点的值,awk命令的方式可以只使用一条命令可以解析xml节点的值。
  • 需求是从以下写出能从下面的xml中取出Title内容(inner text)为空节点的XPath:  Asp.net 22.5 Abraham 22.5 Abraham 容易写出错误的xPath有: //Book[Title[text()='']] /
  • 1.设置生成xml内容格式不换行。  默认用下面代码创建并生成xml的代码如下: XmlDocument doc = new XmlDocument(); //这里创建节点等代码,省略.... //保存 doc.Save(filename);结果生成的节点有换行: ...
  • 规则引擎教程--Xml节点

    千次阅读 2013-05-29 17:22:41
    并将其命名Xml节点”,显示如下: “Xml节点”规则包创建完成。 将“Xml节点”规则包点开,可以看到“对象库”,右键点击对象库,点击菜单项中的“添加XML节点”,如下图: XML节点显示如下,勾选上他的...
  • 1.设置生成xml内容格式不换行。 默认用下面代码创建并生成xml的代码如下: XmlDocument doc = new XmlDocument();  //这里创建节点等代码,省略....  //保存  doc.Save(filename);  结果生成的...
  • C# 遍历 XML文件 节点 net XML节点 遍历

    千次阅读 2007-10-26 16:47:00
    #region 遍历XML文件 调用方法 调用方法 XmlFileAllNodes(Server.MapPath("treeout.xml"), "") /// /// 添加栏目的临时级别 /// int XmlFileAllNodesCloumnLvTemp = 0; /// /// 添加栏目的临时ID
  • 【未解决】Android中解析/res/raw文件夹下面的xml文件 时,试了试下面代码: public static ArrayList getXmlItems(InputStream inputStream, String tag){ ArrayList xmlItemList = new ArrayList(); ...
  • 最近在做一个Android项目,需要用到webservice,在使用cxf开发webService时...当name属性值null时:生成的xml会缺少这个节点,在Android客户端解析xml时就会报指针错; 当name属性值“”时:生成的xml中name节
  • 读: //打开某文件(假设web.config在根目录中) string filename=Server.MapPath("/") + @"WebApplication1/web.config"; XmlDocument xmldoc= new XmlDocument(); xmldoc.Load(filename... //得到顶层节点列表 Xml
  • C#.NET示例读写xml所有节点的代码实现方法和读取xml节点的数据总结读: //打开某文件(假设web.config在根目录中) string filename=Server.MapPath("/") + @"WebApplication1/web.config"; XmlDocument xmldoc= new...
  • C#读取xml节点数据

    万次阅读 2009-09-08 16:43:00
    第一种: 使用XPath XML的路径我配置在web.config 的appSettings节点下 XML结构如下: 1111 aa 2222 bb 在C#中,我使用HashTable来进行存储: Hashtable ht = new Hashta
  • 1.创建一个空白文档 XmlDocument xml = new XmlDocument(); 2.把指定目录下的xml文件加载...3.开始从xml文档中取出xml内容 先获取根节点,因为获取了根节点才能得到其他子节点 XmlElement root = xml.Doc...
  • 读取xml文件生成Document对象 Document转换成String类型串 String串转成xml 已知xml节点取节点值 已知xml节点修改节点值 一个xml文件:<?xml version="1.0" encoding="UTF-8"?> 批量业务现存</tra
  • 表示插入失败 **************************************/ CXMLNode * InsertNode(CString sName); /*************************************** 功能:判断是否存在子节点 参数:[in] pNode 子节点文件指针, ...
  • xstream fromXML() 去除不想要的xml 节点

    千次阅读 2014-11-06 09:30:54
    [color=red]在xml 转 pojo 的时候 去除不想要的xml 节点 有两种方式[/color] [b]1:override wrapMapper;[/b] [color=cyan]//代码[/color] public class myxstream extends XStream { @Override protected ...
  • 内容很简单, 但都是血汗哪~`` 网上资料少, 又没完整的时间去看xsl. 唉~`` 下面的a,b,c可以是表示节点的表达式, 比如: ./Book[@name='1'] [b]1. 判断一个节点是否存在[/b] [code="xml"][/code] ...
  • 使用XStream解析XML,转化Java Bean对象时,如果XML中出现未在Java Bean中定义的属性,会报错,报错信息如下: Exception in thread "main" ...
  • /// 该父节点下的孙节点 为空表示没有该节点 /// 设置值 /// <returns></returns> public bool SetNodeValueByIndex(XmlDocument xmlContent, string parentNode, int index,string sonNode,string grandSonNode...
  • 今天有个sql查询用到了在clob类型下查询xml数据某个节点值,通过百度后在这里记录一下 xml数据格式如下:<?xml version="1.0" encoding="GBK"?> <meta name="subject">529测试66 系统维护 <meta name="authorna

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 94,208
精华内容 37,683
关键字:

xml节点内容为空