【问题标题】:how to parse xml which contains special characters in element attribute value .how to replace that special character with space and parse it in java如何解析在元素属性值中包含特殊字符的xml。如何用空格替换该特殊字符并在java中解析它
【发布时间】:2012-09-22 08:12:20
【问题描述】:

我正在尝试使用 DOM 或 SAX 在 java 中解析 xml 文件。问题是在解析时,如果我的 xml 包含属性值作为特殊字符,如 ",那么解析器会抛出 ParserException。

例如xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<abc>
<check name="bike" value="apache <nice model"/> 
<check name="car" value="tata sumo "style" />
</abc>

在此示例中,xml 元素检查具有属性值,并且包含

现在我的问题是,在将 xml 文件解析为解析器之前,检测 xml 文件属性值中的特殊字符( 或 "),并且必须用空格替换该符号( ")。

例如:如果 xml 包含

<check name="bike" value="apache <nice model"/> 

用空格代替

<check name="bike" value="apache  nice model"/> 

.请给我建议。用什么方法可以完成...我们可以使用XSD...

提前致谢。

【问题讨论】:

    标签: json xmlhttprequest xml-serialization


    【解决方案1】:

    用实体替换那些符号怎么样?

    &apos; is an apostrophe: '
    &amp; is an ampersand: &
    &quot; is a quotation mark: "
    &lt; is a less-than symbol: <
    &gt; is a greater-than symbol: >
    

    【讨论】:

    • 但我不知道如何仅将属性值替换为 <作为 xml 新手,我不知道如何仅将 'apache
    【解决方案2】:

    如果它真的是 xml,有人可能会争论。一条规则是 xml 必须格式正确。这意味着标签必须有开始和结束,在所有地方都不允许某些字符(特别是属性中的 )。

    如果您无法从源头纠正此问题,即生成格式良好的 xml,那么我想您需要先按照@Visher 的建议进行简单的搜索和替换,然后将其视为 xml 或提出您的自己的解析器

    【讨论】:

      【解决方案3】:

      这段代码运行良好(替换引号中的“”):

      public static void main(String[] args)
      {
          char[] characters = new char[]{'<', '>'};
          String[] entities = new String[]{"&lt;", "&gt;"};
      
          String text = "<check name=\"bike\" value=\"apache <nice model\"/> ";
          StringBuilder sb = new StringBuilder();
          boolean insideQuotation = false;
      
          for (int i = 0; i < text.length(); i++)
          {
              char character = text.charAt(i);
      
              if (insideQuotation)
              {
                  int index = -1;
      
                  for (int x = 0; x < characters.length; x++)
                  {
                      if (characters[x] == character)
                      {
                          index = x;
                          break;
                      }
                  }
      
                  if (index != -1)
                      sb.append(entities[index]);
      
                  else
                      sb.append(character);
      
                  if (character == '"')
                      insideQuotation = false; 
              }
              else
              {
                  if (character == '"')
                      insideQuotation = true;
      
                  sb.append(character);
              }
          }
      
          System.out.println(sb.toString());
      }
      

      如果你在引号里面再加一个引号会有问题。

      【讨论】:

      • 真的很感谢你:)谢谢你付出了这样的努力:)
      • 如果我们传递一个xml文件并转换为字符串。如果我们按照相同的方法..是否可以工作啊??
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多