Пример #1
0
        /// <summary>
        /// <paramref name="parentNode"/>를 기준으로 XmlElement를 찾아서 InnerText값을 반환한다.
        /// </summary>
        /// <param name="parentNode">검색 기준이 되는 parent node</param>
        /// <param name="xpath">검색 식</param>
        /// <returns>검색한 XmlElement의 Text 속성 값, 없으면 빈 문자열 반환</returns>
        public string GetElementText(XmlNode parentNode, string xpath) {
            parentNode.ShouldNotBeNull("parentNode");

            var element = FindElement(parentNode, xpath);

            return (element != null) ? element.InnerText : string.Empty;
        }
Пример #2
0
        /// <summary>
        /// Processing Instruction Node를 추가한다.
        /// </summary>
        /// <param name="parentNode"></param>
        /// <param name="target"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public XmlProcessingInstruction AddPI(XmlNode parentNode, string target, string data) {
            parentNode.ShouldNotBeNull("parentNode");

            if(IsDebugEnabled)
                log.Debug("Add XmlProcessingInstruction node. parentNode=[{0}], target=[{1}], data=[{2}]",
                          parentNode.Name, target, data);

            var result = CreateProcessingInstruction(target, data);
            parentNode.AppendChild(result);

            return result;
        }
Пример #3
0
        /// <summary>
        /// Text Node를 추가한다.
        /// </summary>
        /// <param name="parentNode"></param>
        /// <param name="text"></param>
        /// <returns></returns>
        public XmlText AddTextNode(XmlNode parentNode, string text) {
            parentNode.ShouldNotBeNull("parentNode");

            if(IsDebugEnabled)
                log.Debug("Add XmlText node. parentNode=[{0}], text=[{1}]", parentNode.Name, text);

            var result = CreateTextNode(text);
            parentNode.AppendChild(result);

            return result;
        }
Пример #4
0
        /// <summary>
        /// XML Element로 파일 내용을 넣는다<br/>
        /// 파일내용은 bin.base64 형태로 XML string을 만들어서 XmlElement의 InnerText로 넣는다.
        /// </summary>
        /// <param name="parentNode">부모 노드</param>
        /// <param name="name">새로운 XML Element TagName</param>
        /// <param name="filename">DOM에 포함시킬 파일 이름(fullpath)</param>
        /// <returns>추가된 XmlElement</returns>
        /// <remarks>
        ///	파일 내용을 XML DOM에 넣어서 기존의 MSXML2.IXmlHttp를 사용하면 속도문제가 크다.<br />
        ///	.NET Version에서는 XMLHttp를 WebHttpRequest/WebHttpResponse를 사용하므로 문제없다. 
        ///	Client용 Application 중 MSXML 2,3,4를 사용하면 속도문제는 해결되지 않는다.
        /// </remarks>
        public XmlElement AddFileElement(XmlNode parentNode, string name, string filename) {
            parentNode.ShouldNotBeNull("parentNode");

            if(IsDebugEnabled)
                log.Debug("Add XmlElement that has file contents. parentNode=[{0}], name=[{1}], filename=[{2}]",
                          parentNode.Name, name, filename);

            if(File.Exists(filename) == false)
                throw new FileNotFoundException("File not founded", filename);

            var element = AddElementText(parentNode, name, string.Empty);

            if(element != null) {
                AddAttribute(element, "dt", "bin.base64");
                AddAttribute(element, "filePath", filename);
                AddAttribute(element, "length", filename.GetFileSize());

                element.InnerText = FileTool.ToByteArray(filename).Base64Encode();
            }

            return element;
        }
Пример #5
0
        /// <summary>
        /// 부모 노드에 노드를 추가한다.
        /// </summary>
        /// <param name="parentNode">부모노드</param>
        /// <param name="nodeType">System.Xml.XmlNodeType</param>
        /// <param name="name">Tag Name</param>
        /// <param name="text">Node Value or Text</param>
        /// <returns>추가된 System.Xml.XmlNode</returns>
        public XmlNode AddNode(XmlNode parentNode, XmlNodeType nodeType, string name, string text) {
            parentNode.ShouldNotBeNull("parentNode");

            XmlNode result;

            switch(nodeType) {
                case XmlNodeType.Element:
                    result = AddElementText(parentNode, name, text);
                    break;
                case XmlNodeType.Attribute:
                    result = AddAttribute(parentNode, name, text);
                    break;
                case XmlNodeType.Text:
                    result = AddTextNode(parentNode, text);
                    break;
                case XmlNodeType.CDATA:
                    result = AddCDataSection(parentNode, text);
                    break;
                case XmlNodeType.EntityReference:
                    result = AddEntityRef(parentNode, name);
                    break;
                case XmlNodeType.ProcessingInstruction:
                    result = AddPI(parentNode, name, text);
                    break;
                case XmlNodeType.Comment:
                    result = AddComment(parentNode, text);
                    break;
                case XmlNodeType.Entity:
                    result = AddEntity(parentNode, text);
                    break;

                case XmlNodeType.Document:
                case XmlNodeType.DocumentType:
                case XmlNodeType.DocumentFragment:
                case XmlNodeType.Notation:
                    throw new NotSupportedException("제공하지 않는 NodeType 입니다.");

                default:
                    throw new InvalidOperationException("알 수 없는 NodeType 입니다.");
            }

            return result;
        }
Пример #6
0
        /// <summary>
        /// 부모노드에 <see cref="XmlEntity"/>를 추가한다.
        /// </summary>
        /// <param name="parentNode">부모 노드</param>
        /// <param name="name">Entity 노드 이름</param>
        /// <returns>추가된 <see cref="XmlEntity"/> 노드</returns>
        public XmlEntity AddEntity(XmlNode parentNode, string name) {
            parentNode.ShouldNotBeNull("parentNode");

            if(IsDebugEnabled)
                log.Debug("Add XmlEntity node... parentNode=[{0}], name=[{1}]", parentNode.Name, name);

            var result = (XmlEntity)CreateNode(XmlNodeType.Entity, name, null);

            if(DocumentType != null)
                DocumentType.Entities.SetNamedItem(result);

            parentNode.AppendChild(result);

            return result;
        }
Пример #7
0
        /// <summary>
        /// <paramref name="parentNode"/>에 <see cref="XmlEntityReference"/>를 추가한다.
        /// </summary>
        /// <param name="parentNode">대상 노드</param>
        /// <param name="name">추가할 <see cref="XmlEntityReference"/>의 이름</param>
        /// <returns>추가된 <see cref="XmlEntityReference"/></returns>
        public XmlEntityReference AddEntityRef(XmlNode parentNode, string name) {
            parentNode.ShouldNotBeNull("parentNode");

            if(IsDebugEnabled)
                log.Debug("Add XmlEntityReference node... parentNode=[{0}], name=[{1}]", parentNode.Name, name);

            var result = CreateEntityReference(name);
            parentNode.AppendChild(result);

            return result;
        }
Пример #8
0
        /// <summary>
        /// XmlElement를 생성하여 부모 노드에 추가한다.
        /// </summary>
        /// <param name="parentNode"></param>
        /// <param name="name">Element Tag Name (Element의 TagName은 문자, '_', ':' 만 가능하다.)</param>
        /// <param name="text">Element Text Value</param>
        /// <returns>추가된 XmlElement</returns>
        public XmlElement AddElementText(XmlNode parentNode, string name, string text) {
            parentNode.ShouldNotBeNull("parentNode");

            if(IsDebugEnabled)
                log.Debug("XmlElement를 추가합니다... parentNode=[{0}], name=[{1}], text=[{2}]", parentNode.Name, name, text);

            var result = CreateElementText(name, text);
            parentNode.AppendChild(result);

            return result;
        }
Пример #9
0
        /// <summary>
        /// 부모 노드에 원본 노드의 복사본을 추가한다.
        /// </summary>
        /// <param name="parentNode">부모 노드</param>
        /// <param name="srcNode">복사할 대상 요소</param>
        /// <returns>새로 복사해서 부모노드에 추가한 요소(<see cref="XmlElement"/>)</returns>
        public XmlElement AddElement(XmlNode parentNode, XmlElement srcNode) {
            parentNode.ShouldNotBeNull("parentNode");
            srcNode.ShouldNotBeNull("srcNode");

            if(IsDebugEnabled)
                log.Debug("XmlElement를 추가합니다... parentNode=[{0}], srcNode=[{1}]", parentNode.Name, srcNode.Name);

            var result = srcNode.CloneNode(true) as XmlElement;

            if(result != null) {
                parentNode.AppendChild(result);

                if(IsDebugEnabled)
                    log.Debug("XmlElement를 추가했습니다!!! 추가된 XmlElement=[{0}]", result);
            }

            return result;
        }
Пример #10
0
        /// <summary>
        /// XmlCommend Node를 추가한다.
        /// </summary>
        /// <param name="parentNode"></param>
        /// <param name="comment">Commant Text</param>
        /// <returns></returns>
        public XmlComment AddComment(XmlNode parentNode, string comment) {
            parentNode.ShouldNotBeNull("parentNode");

            if(IsDebugEnabled)
                log.Debug("Add Comment node... parentNode=[{0}], comment=[{1}]", parentNode.Name, comment);

            var result = CreateComment(comment);
            return parentNode.AppendChild(result) as XmlComment;
        }
Пример #11
0
        /// <summary>
        /// Xml 문자열을 XmlDocument로 만들어서 Root Node를 부모 노드의 자식 노드로 추가한다.
        /// </summary>
        /// <param name="parentNode"></param>
        /// <param name="xmlText"></param>
        /// <returns>추가에 성공한 노드, 실패하면 null이 반환된다.</returns>
        public XmlElement AddElementXml(XmlNode parentNode, string xmlText) {
            parentNode.ShouldNotBeNull("parentNode");

            if(IsDebugEnabled)
                log.Debug("새로운 XmlElement를 추가합니다... parentNode=[{0}], xmlText=[{1}]", parentNode.Name, xmlText);

            XmlElement result = null;

            try {
                XmlDocument document = xmlText.CreateXmlDocument();
                if(document.IsValidDocument()) {
                    result = document.DocumentElement.CloneNode(true) as XmlElement;
                    if(result != null)
                        parentNode.AppendChild(result);
                }
            }
            catch(Exception ex) {
                if(log.IsWarnEnabled) {
                    log.Warn("새로운 XmlElement를 추가하는데 실패했습니다.");
                    log.Warn(ex);
                }

                result = null;
            }
            return result;
        }
Пример #12
0
        /// <summary>
        /// XmlCDataSection Node를 부모 노드에 추가한다. (&lt;![CDATA[ xxxx ]]&gt;)
        /// </summary>
        /// <param name="parentNode">부모노드</param>
        /// <param name="cdata">CDataSection의 값</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">parentNode가 null일 때</exception>
        public XmlCDataSection AddCDataSection(XmlNode parentNode, string cdata) {
            parentNode.ShouldNotBeNull("parentNode");

            if(IsDebugEnabled)
                log.Debug("Add CDataSection node... parentNode=[{0}], cdata=[{1}]", parentNode.Name, cdata);

            var cds = CreateCDataSection(cdata);
            parentNode.AppendChild(cds);

            return cds;
        }
Пример #13
0
        /// <summary>
        /// parentNode에 Attribute를 추가한다.
        /// </summary>
        /// <param name="parentNode">부모 노드</param>
        /// <param name="srcAttribute">원본 XmlAttribute 객체</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">parentNode가 null일 때</exception>
        public XmlAttribute AddAttribute(XmlNode parentNode, XmlAttribute srcAttribute) {
            parentNode.ShouldNotBeNull("parentNode");
            srcAttribute.ShouldNotBeNull("srcAttribute");

            if(IsDebugEnabled)
                log.Debug("Add instance of Addtribute to parent node. parentNode=[{0}], srcAttribute=[{1}]",
                          parentNode.Name, srcAttribute.Name);

            return (XmlAttribute)parentNode.Attributes.SetNamedItem(srcAttribute);
        }
Пример #14
0
        /// <summary>
        /// <paramref name="parentNode"/>에 새로운 Attribute를 추가한다.
        /// </summary>
        /// <param name="parentNode">부모 노드</param>
        /// <param name="name">특성 이름</param>
        /// <param name="attrValue">특성 값</param>
        /// <param name="replace">기존 존재시 대체 여부</param>
        /// <returns>성공시 추가된 XmlAttribute, 실패시에는 null</returns>
        /// <exception cref="ArgumentNullException">parentNode가 null일 때</exception>
        public XmlAttribute AddAttribute(XmlNode parentNode, string name, object attrValue, bool replace) {
            parentNode.ShouldNotBeNull("parentNode");
            name.ShouldNotBeWhiteSpace("name");

            if(IsDebugEnabled)
                log.Debug("노드에 새로운 Attribute를 추가합니다... parentNode=[{0}], name=[{1}], attrValue=[{2}], replace=[{3}]",
                          parentNode.Name, name, attrValue, replace);

            var result = (XmlAttribute)parentNode.Attributes.GetNamedItem(name.Replace(" ", "_"));

            if(result == null) {
                result = CreateAttribute(name);
                if(attrValue != null)
                    result.Value = attrValue.ToString();
                parentNode.Attributes.Append(result);
            }
            else if(replace && attrValue != null) {
                result.Value = attrValue.ToString();
            }

            return result;
        }
Пример #15
0
        /// <summary>
        /// 지정된 노드내에서 XmlNode를 찾는다.
        /// </summary>
        /// <param name="parentNode">부모 노드</param>
        /// <param name="xpath">XPATH 형식 ("ROOT") </param>
        public XmlNode FindNode(XmlNode parentNode, string xpath) {
            parentNode.ShouldNotBeNull("parentNode");

            if(IsDebugEnabled)
                log.Debug("노드 찾기... parentNode=[{0}], xpath=[{1}]", parentNode.Name, xpath);

            return parentNode.SelectSingleNode(xpath);
        }
Пример #16
0
        /// <summary>
        /// <paramref name="parentNode"/>에서 <paramref name="xpath"/>에 해당하는 모든 XmlElement를 리스트로 반환한다.
        /// </summary>
        /// <param name="parentNode">기준이 되는 parent node</param>
        /// <param name="xpath">검색 식</param>
        /// <returns>XmlNodeList</returns>
        protected virtual XmlNodeList FindElements(XmlNode parentNode, string xpath) {
            parentNode.ShouldNotBeNull("parentNode");

            if(IsDebugEnabled)
                log.Debug("요소 찾기... parentNode=[{0}], xpath=[{1}]", parentNode.Name, xpath);

            if(xpath.IsNotWhiteSpace())
                return parentNode.SelectNodes(xpath);

            return null;
        }