2011-10-10 111 views
0

我在Tomcat 6.0.33应用程序服务器上使用Java 6。我得到了必须呈现为表单元素的XML。我收到的XML看起来像将XML属性转换为有效的HTML属性值?

<pquotec type='input' label='Price Quote Currency' nwidth='200' vlength='10'> 
    XYZ 
</pquotec> 

以下是所需的输出。

<label for="#valid_id_goes_here">Price Quote Currency</label> 
<input type="text" size="10" style="width:200px;" value="XYZ" name="#valid_name_goes_here#" id="#valid_id_goes_here#" /> 

我的问题是,什么是转换存储在XML元素的标签属性的东西的价值,我可以代替“#valid_name_goes_here#”上面的策略?这个策略最好能让我再次翻译回来。请注意,出现在“”中的内容可能不一定适用于id和name的值。

感谢您的帮助, - 戴夫

+0

XSLT可能会这样做。这是你的选择吗? –

回答

1

input元素的name属性被定义为类型CDATA,这基本上意味着“任何字符数据”,所以我认为应该不是真的有问题。

如果确实遇到有效性问题,可以将任何“尴尬”(或简单所有)字符转换为其编码形式。例如。 é会变成&#233 ;.

+0

+1用于检查html的DTD – Zasz

+0

是的,但是如果标签是“Price&Currency”,则表达式id =“Price&Currency”不会飞。也转换为ID =“价格&货币”可能不会飞。我不在乎id =“”表达式是什么,但我需要它是有效的,我需要从标签表达式中导出它(然后再返回)。这有意义吗? – Dave

+0

这个问题完全有意义。你的第一篇文章提到了“#valid_name_goes_here#”,所以我专注于name属性(“#valid_id_goes_here#”被滚动到右边;-)。现在我看到id属性仍然是一个问题。由于id属性的类型是ID,它不能比A-Za-z和数字多得多,所以你需要推出你自己的编码。一种简单的方法是用十六进制的Unicode代码来替换每个字符。该ID也必须以一封信开头。因此,“XYZ”将变成“id00580059005A”。这是毫不含糊的,也支持往返。 – Dabbler

0

使用XSLT - 继承人是将XML转换为HTML,但它是微不足道的XML转换为XML,以及一个例子。

在java Xalan可以做XSLT,而this thread也可以帮到你。

如果你想要做的XML解析和渲染使用JSP参考this thread XML语法分析器的列表

编辑目标HTML:

嗯,你可以写没有问题XML片段,并简单询问如何将任何字符串转换为有效的HTML标识,然后再返回。使用 attributesHTML来存储原始传入的字符串。然后使用正则表达式从传入字符串中提取有效字符,用下划线替换所有无效字符,并将其用作ID。您可能会得到重复ID的可能性很小。在这种情况下,您可以随时返回并使XML以没有重复的方式出现。

这样,您就可以拿回原始字符串,并有有效身份证

+0

嗨,其实我的问题是寻求一种算法来将标签(如“Price Quote Currency”)转换为HTML“id”属性的有效值。显然,“价格报价货币”本身不起作用,因为空格在ID字段中无效。你明白我在问什么吗? – Dave

+0

编辑答案 – Zasz

相关问题