我想用以下数据翻译XML文件:
<FlatData>
<Details1_Collection>
<Details1 Customer1="Customer" Total1="3" />
...
</Details1_Collection>
</FlatData>
Run Code Online (Sandbox Code Playgroud)
我感兴趣的数据是每个属性及其值Details1.问题是这些属性在我想翻译的每个XML文件中都不一定相同,我想要一个可以处理Details1这些的通用XSL :
<Details1 Customer1="Customer" Total1="3" />
<Details1 Name="Jim" Age="14" Weight="180" />
<Details1 Date="2009-07-27" Range="1-5" Option1="True" />
Run Code Online (Sandbox Code Playgroud)
这些不同Details1不会出现在相同的源XML文件中,而是出现在不同的文件中.但是,我想在每个上使用相同的XSL.
我以为我需要类似的东西,<xsl:value-of select="@attribute_name"/>但是@attribute_name当我事先不知道会有什么属性时我该怎么做?另外,如何捕获属性名称?我想将上面的源XML分解为:
<Details1>
<Customer1>Customer</Customer1>
<Total1>3</Total1>
</Details1>
Run Code Online (Sandbox Code Playgroud)
编辑:感谢您的回复!但是,我遇到的问题不仅仅是以下输出:
<?xml version="1.0" encoding="UTF-8"?>
<FlatData>
<Details1_Collection></Details1_Collection>
</FlatData>
Run Code Online (Sandbox Code Playgroud)
我已经尝试了lavinio和JörnHorstmann的答案,并尝试将两者结合起来.我运行这个命令:
msxsl.exe -o output.xml input.xml transform.xsl
Run Code Online (Sandbox Code Playgroud)
我认为阻碍的是输入文件中的命名空间:
<Report Name="MyReport" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="MyReport">
Run Code Online (Sandbox Code Playgroud) 虽然不推荐使用target ="_ blank",但为什么W3C验证器没有给出错误?您可以在验证器中粘贴并检查此代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<p>
<a href="http://www.stackoverflow.com" title="New window will open" target="_blank">Link opens in new window</a>
</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
编辑:
这是否意味着XHTML 1.1支持target ="_ blank",但XHTML 1.0严格不支持?或者它是W3C验证器中的错误?
如何xlink:href在xsl模板中获取xml节点调用的属性的值?
我有这个xml节点:
<DCPType>
<HTTP>
<Get>
<OnlineResource test="hello" xlink:href="http://localhost/wms/default.aspx"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" />
</Get>
</HTTP>
</DCPType>
Run Code Online (Sandbox Code Playgroud)
当我尝试以下xsl时,我收到错误消息"未定义前缀'xlink'." :
<xsl:value-of select="DCPType/HTTP/Get/OnlineResource/@xlink:href" />
Run Code Online (Sandbox Code Playgroud)
当我尝试这个简单的属性时,它可以工作:
<xsl:value-of select="DCPType/HTTP/Get/OnlineResource/@test" />
Run Code Online (Sandbox Code Playgroud) 在samplexml.svg中有一个节点
<image width="744" height="1052" xlink:href="image1.png"/>
Run Code Online (Sandbox Code Playgroud)
我需要将"image1.png"替换为"image2.png"之类的其他值.请指导我如何使用示例代码.
我可以得到属性值"image1.png".这是代码:
$xdoc = new DomDocument;
$xdoc->Load('samplexml.svg');
$tagName = $xdoc->getElementsByTagName('image')->item(0);
$attribNode = $tagName->getAttributeNode('xlink:href');
echo "Attribute Name : " . $attribNode->name . "<br/>";
echo "Attribute Value : " . $attribNode->value;
Run Code Online (Sandbox Code Playgroud)
这是samplexml.svg:
<svg>
<g>
<title>Test title</title>
<image x="0" y="0" width="744" height="1052" xlink:href="image1.png"/>
</g>
</svg>
Run Code Online (Sandbox Code Playgroud)
如何以编程方式更改xlink:href值?
我喜欢XML
<Categories>
<category name="a">
<SubCategory>1</SubCategory>
<SubCategoryName>name1</SubCategoryName>
</category>
<category name="b">
<SubCategory>2</SubCategory>
<SubCategoryName>name2</SubCategoryName>
</category>
</Categories>
Run Code Online (Sandbox Code Playgroud)
我如何获得的值<SubCategoryName>从<category name="a">?
我对JAXB/Jackson编组有一个问题.我有这样的注释
@XmlAttribute(name = "private")
protected Boolean mPrivate;
Run Code Online (Sandbox Code Playgroud)
如果mPrivate变量是,我希望这个属性不存在null.
如果输出是XML,这可以正常工作.但如果我使用杰克逊切换到JSON,输出就是
xxxxxxx, "private":null, xxxxxxxx
Run Code Online (Sandbox Code Playgroud)
任何人都知道为什么会发生这种情况以及如何解决这个问题?提前致谢.
是否可以将自定义结构序列化为xml属性?
示例代码:
public class Dummy<T>
{
private Dummy() { }
public Dummy(T item1)
{
Item1 = item1;
Item2 = item1;
}
public T Item1 { get; set; }
[XmlAttribute]
public T Item2 { get; set; }
}
public struct Meh
{
public int Prop { get; set; }
}
[Test]
public void XmlMehTest()
{
var meh = new Meh{Prop = 1};
var dummy = new Dummy<Meh>(meh);
using (var writer = new StringWriter())
{
var serializer = new XmlSerializer(dummy.GetType());
// System.InvalidOperationException …Run Code Online (Sandbox Code Playgroud) 我有一个xml文档,格式如下:
<root>
<obj>
<indexlist>
<index name="NUMD" value="val1" />
<index name="DATE" value="val2" />
</indexlist>
</obj>
</root>
Run Code Online (Sandbox Code Playgroud)
现在我想更改名称设置为“ DATE”的索引元素的value属性。我得到这样的属性:
$attr = $xml.selectnodes("//obj/indexlist/index[@name='DATE']/@value")
Run Code Online (Sandbox Code Playgroud)
我可以通过键入以下内容来查看值:
$attr.'#text'
Run Code Online (Sandbox Code Playgroud)
但我无法更改:
$attr.'#text' = 'foo'
The property '#text' cannot be found on this object. Verify that the property exists and can be set.
At line:1 char:1
+ $n.'#text' = 'foo'
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException
Run Code Online (Sandbox Code Playgroud)
如何更改XMLAttribute的值?
如果可能的话,我也想坚持使用XPath直接返回属性,因为该脚本的最终用户将使用XPath在配置文件中定义要更改的元素和属性。
在将XPath用作属性时,用户只需提供两个参数即可更改属性和future-value:XPath和value。
我是使用XML模式的新手,所以请原谅我的无能,如果这比我自己认为必须的更微不足道.
我正在尝试创建一个必需的属性,该属性必须包含一个或多个列表中以空格分隔的字符串值.该列表是4种典型的HTTP请求方法; get,post,put,和delete.
所以有效的元素包括:
<rule methods="get" />
<rule methods="get post" />
<rule methods="post put delete" />
Run Code Online (Sandbox Code Playgroud)
而无效元素包括:
<rule methods="get get" />
<rule methods="foobar post" />
<rule methods="get;post;put" />
Run Code Online (Sandbox Code Playgroud)
我试着用枚举和长度来愚弄,但我不相信我理解我需要做什么(或者如果它实际上是可能的话,尽管看起来好像应该这样)
这就是我现在所处的位置,感谢@tdrury:
<xs:attribute name="methods" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse" />
<xs:pattern value="(?:(?:get|post|put|delete)\s?){1,4}" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
Run Code Online (Sandbox Code Playgroud)
哪个有效,除了重复(如get get或post post post)和缺少空格(如getpost或postputdelete)
编辑:
在玩了一下之后,我提出了一个想法:列举所有可能的序列.值得庆幸的是,这份名单是(暂时)固定在四个通常的运输方式,get,post,put,和delete …
我在表(Qualifications)中有一个XML列(Criteria),它包含不同的XML:
<training ID="173"><badge ID="10027" /><badge ID="10028" /></training>
<book Category="Hobbies And Interests" PropertyName="C#" CategoryID="44" />
<sport Category="Hobbies And Interests" PropertyName="Cricket" CategoryID="46" />
<education ID="450" School="Jai ambe vidyalaya"></education>
Run Code Online (Sandbox Code Playgroud)
我想读取"training"节点下所有节点的"badge"节点"ID"属性.
有人可以帮忙吗?