我有一个PHP5 DOMDocument,我尝试找到根节点(不是根元素).
例:
<test>
<element>
<bla1>x</bla1>
<bla2>x</bla2>
</element>
<element>
<bla1>y</bla1>
<bla2>y</bla2>
</element>
<element>
<bla1>z</bla1>
<bla2>z</bla2>
</element>
</test>
Run Code Online (Sandbox Code Playgroud)
我想得到"测试"的DOMNode,以便我可以调用 - 例如 - hasChildNodes.我可以得到"documentElement",但这是一个DOMElement.也许我可以从那里出发?
$d = DOMDocument::loadXML($xml);
// [... do some stuff here to find document's root node ...]
if ($rootnode->hasChildNodes()) echo 'yayy!'
Run Code Online (Sandbox Code Playgroud)
谁能填补空白?我似乎是盲目的.
(显然不仅仅是我想要调用的hasChildNodes - 所以不,找到另一个方法来查找文档是否包含东西也无济于事.这只是我的简单示例.我最后需要一个DOMNode.)
我的应用程序序列化流中的对象.以下是我需要的样本:
<links>
<link href="/users" rel="users" />
<link href="/features" rel="features" />
</links>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,对象是"链接"对象的集合.
-----------第一版
起初我使用了DataContractSerializer,但是你不能将成员序列化为属性(源)
这是对象:
[DataContract(Name="link")]
public class LinkV1
{
[DataMember(Name="href")]
public string Url { get; set; }
[DataMember(Name="rel")]
public string Relationship { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是结果:
<ArrayOflink xmlns:i="...." xmlns="...">
<link>
<href>/users</href>
<rel>users</rel>
</link>
<link>
<href>/features</href>
<rel>features</rel>
</link>
</ArrayOflink>
Run Code Online (Sandbox Code Playgroud)
-----------第二版
好吧,不要安静我想要的东西,所以我尝试了经典的XmlSerializer,但是......哦,不,如果根元素是一个集合,你不能指定根元素和集合元素的名称......
这是代码:
[XmlRoot("link")]
public class LinkV2
{
[XmlAttribute("href")]
public string Url { get; set; }
[XmlAttribute("rel")]
public string Relationship { get; set; } …Run Code Online (Sandbox Code Playgroud) 有些文章说根节点的级别是 0,而有些文章说它是 1。
来自https://www.gatevidyalay.com/tree-data-structure-tree-terminology/
在树中,从上到下的每一步都称为树的层次。级别计数从 0 开始,并在每个级别或步骤增加 1。
这里的根级别为 0
在http://typeocaml.com/2014/11/26/height-depth-and-level-of-a-tree/
要记住的重要一点是,在谈论级别时,它是从 1 开始的,根的级别是 1。我们在解决与级别相关的问题时需要注意这一点。
所以它说那个级别是1
我无法理解哪个是正确的。
对不起 - 我的问题与此问题几乎相同,但由于没有得到可行的答案,我希望其他人有一些新的想法.
我有一个绑定到单一类型的层次结构的WPF TreeView:
public class Entity
{
public string Title { get; set; }
public ObservableCollection<Entity> Children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Entity类实现了INotifyPropertyChanged,但为了清楚起见,我省略了这段代码.
TreeView绑定到ObservableCollection <Entity>,每个Entity实例通过其Children属性公开一组包含的Entity实例:
<TreeView ItemsSource="{Binding Path=Entities}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Entity}" ItemsSource="{Binding Path=Children}">
<TextBlock Text="{Binding Path=Title}" />
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
最初,TreeView按预期绑定并正确显示多级层次结构.此外,当以编程方式修改其中一个Children集合的成员资格时,更改将正确反映在TreeView中.
但是,对根成员级别ObservableCollection <Entity>的成员身份的更改不会反映在TreeView中.
任何建议,将不胜感激.
蒂姆,谢谢
我正在使用wxPython制作一个python树可视化工具.它会像这样使用:
show_tree([ 'A node with no children', ('A node with children', 'A child node', ('A child node with children', 'Another child')) ])
Run Code Online (Sandbox Code Playgroud)
它运行正常但它显示了一个值为"Tree"的根.我这样做是为了创造多个根,但后来才知道我不允许这样做.我恢复了原来的代码,但是用它改变了它:self.tree = wx.TreeCtrl(self)对此:self.tree = wx.TreeCtrl(self, style=wx.TR_HIDE_ROOT).它工作但它没有显示侧面的小箭头,所以你不知道哪些节点有孩子.有没有办法隐藏根节点但保留箭头.注意:我在使用Python 2.5版和wxPython版本2.8.4.0的Mac上.
我想显示一个树形结构.我是否真的需要为用户/树提供一个预定义的硬编码根节点,如"RootUnit",在那里他可以添加他的孩子或后代?
添加节点时这是否有意义或仅引起麻烦?
我有一个 JTree 结构,如下所示。我有每当节点有子节点时就会出现的图标,它工作正常。
我的问题是我需要隐藏 ROOT 节点。当我隐藏 ROOT 节点时,不会显示 MainTop1 和 MainTop2 节点的图标,即使它们有子节点也是如此。为了隐藏 ROOT 节点,我使用“setRootVisible(false)”。
此外,当 ROOT 节点隐藏时,Topic1 和 Topic 节点的图标也会正确显示。
有人知道当ROOT隐藏时如何显示MainTop1和MainTop2的图标吗?提前致谢。
下面是我的树结构:
ROOT
MainTop1
Topic1
Subtopic1
Subtopic2
MainTop2
Topic2
Subtopic1
Run Code Online (Sandbox Code Playgroud) 我正在处理一个小的XSLT文件来复制XML文件的内容并删除声明和根节点.根节点具有名称空间属性.
我目前正在使用它,除了现在命名空间属性现在被复制到直接子节点.
这是我的xslt文件到目前为止,没有什么大或复杂的:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" encoding="utf-8"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<xsl:apply-templates select="node()" />
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
我的输入文件是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<Report_Data xmlns="examplenamespace">
<Report_Entry>
<Report_Date>
</Report_Date>
</Report_Entry>
<Report_Entry>
<Report_Date>
</Report_Date>
</Report_Entry>
<Report_Entry>
<Report_Date>
</Report_Date>
</Report_Entry>
</Report_Data>
Run Code Online (Sandbox Code Playgroud)
XSLT之后的输出是这样的:
<Report_Entry xmlns="examplenamespace">
<Report_Date>
</Report_Date>
</Report_Entry>
<Report_Entry xmlns="examplenamespace">
<Report_Date>
</Report_Date>
</Report_Entry>
<Report_Entry xmlns="examplenamespace">
<Report_Date>
</Report_Date>
</Report_Entry>
Run Code Online (Sandbox Code Playgroud)
问题是,每个Report_Entry标记现在从我删除的根节点获取该xml命名空间属性.
如果你想知道,我知道XSLT的输出结构不好.我稍后在XSLT转换后添加XML声明和不同的根节点名称.